Я пытаюсь написать свой первый taskExecutor, и у меня есть некоторые сомнения.
Мне нужно выполнить 3 задачи одновременно.
Моя конфигурация правильная?
Должна ли конфигурация быть с задачами в одном bean-компоненте? (Лучшая практика)
@Configuration
@EnableScheduling
public class TaskExecutor {
private static final Logger LOGGER = LogManager.getLogger(TaskExecutor.class);
@Autowired
private Processor processor;
@Scheduled(cron = "0 55 23 28-31 * ?")
public void firstTask() throws ParseException {
}
}
@Scheduled(cron = "0 55 23 28-31 * ?")
public void secondTask() {
}
}
@Scheduled(cron = "0 55 23 28-31 * ?")
public void thirdTask() {
}
}
@Bean
public ThreadPoolTaskScheduler taskScheduler() {
LOGGER.info("Setting up thread pool task scheduler with 3 threads.");
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(3);
scheduler.setThreadNamePrefix("task-");
scheduler.setAwaitTerminationSeconds(60);
scheduler.setWaitForTasksToCompleteOnShutdown(true);
scheduler.setErrorHandler(t -> LOGGER.error(
"Unknown error occurred while executing task.", t
));
scheduler.setRejectedExecutionHandler(
(r, e) -> LOGGER.error(
"Execution of task {} was rejected for unknown reasons.", r
)
);
return scheduler;
}
}




сделать, как показано ниже
@Scheduled(cron = "0 * * * * ?")
public void scheduleTaskWithCronExpression() {
logger.info("Cron Task :: Execution Time - {}", dateTimeFormatter.format(LocalDateTime.now()));
}
или вы можете
используйте CronTrigger для планирования задачи на основе выражения cron, как показано ниже:
CronTrigger cronTrigger = new CronTrigger("10 * * * * ?");
Предоставленный триггер можно использовать для запуска задачи в соответствии с определенной заданной частотой или расписанием:
taskScheduler.schedule(new RunnableTask("Cron Trigger"), cronTrigger);
В этом случае RunnableTask будет выполняться на 10-й секунде каждой минуты.
Я не понимаю, чем отличается первый предложенный пункт