У меня есть задание по расписанию с последующей настройкой:
@Configuration
@EnableScheduling
public class SchedulerConfig {
@Value("${scheduled.task.pool.size}")
private int schedulerPoolSize;
@Value("${scheduled.task.thread.name.prefix}")
private String threadNamePrefix;
@Bean
ThreadPoolTaskScheduler taskScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler() {
@Override
public void destroy() {
this.getScheduledThreadPoolExecutor().setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
super.destroy();
}
};
threadPoolTaskScheduler.setPoolSize(schedulerPoolSize);
threadPoolTaskScheduler.setThreadNamePrefix(threadNamePrefix);
threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
threadPoolTaskScheduler.setAwaitTerminationSeconds(20);
return threadPoolTaskScheduler;
}
Вот мое задание
@Scheduled(fixedDelayString = "${scheduled.task.job1.fixed.delay}")
public void scheduleTaskJob1() {
logger.info("Fixed delay task called every 3 seconds after latest finished Execution Time - {}",
dateTimeFormatter.format(LocalDateTime.now()));
String HttpErrorCode = "xxx";
try {
//10s taken to complete
HttpErrorCode = mappingErrorService.getHttpErrorCode();
} catch (Exception ex) {
logger.error("Ran into an error {}", ex);
}
logger.info("Current Thread : {} " + HttpErrorCode, Thread.currentThread().getName());
}
Я много раз тестировал, но когда останавливал свое приложение, оно всегда показывалоошибка ... и моя задача не была успешно выполнена.Кажется, что setWaitForTasksToCompleteOnShutdown и setAwaitTerminationSeconds не работают.
Я также пробую с
spring.quartz.wait-for-jobs-to-complete-on-shutdown=true
, но не повезло.Моя задача всегда попадала в исключение и не дала результата