EnableAsync есть, запросы что вызываюся из @RestController нормально реагируют на @Async
@Configuration
@EnableAsync
public class ThreadConfig {
@Bean
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(60);
executor.setMaxPoolSize(200);
//other proeprties to be set here
executor.setThreadNamePrefix("ASYNC-");
executor.initialize();
return executor;
}
}
но дальше внутри сервис что ловит Exception и его пытается записать, упорно не реагирует на @Async, хотя вроде все условия соблюдаются: метод в отдельном сервисе
@Service
public class BatchLogGateway {
@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;
private static final Logger logger = LoggerFactory.getLogger(BatchLogGateway.class);
@Async
// @Transactional(isolation= Isolation.READ_COMMITTED, propagation = Propagation.REQUIRES_NEW, noRollbackFor = LockTimeoutException.class)
public void writeBatchLog(int batchNo, String errorTxt) {
MapSqlParameterSource namedParameters = new MapSqlParameterSource();
namedParameters.addValue("batchNo", batchNo);
namedParameters.addValue("error", errorTxt);
try {
jdbcTemplate.update("INSERT INTO batches_error_log (error_log, batch_no) values (:error, :batchNo)", namedParameters);
} catch (Exception e) {
logger.error("writing into batchLog {} error was unsuccessful", batchNo);
}
}
}
в логе вижу что writeBatchLog() выполняется в том же треде, что и его вызывающий метод. Spring boot свежий: 3.1.1