@Async Spring boot не пашет местами
От: Ballista  
Дата: 24.07.23 12:54
Оценка:
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.