Как написать ThreadPoolTaskScheduler с помощью Cron? - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь написать свой первый taskExecutor, и у меня есть некоторые сомнения.

Мне нужно выполнить 3 задачи одновременно.

Правильна ли моя конфигурация?

Должна ли конфигурация быть с задачами в одном бине?(Лучшая практика)

@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;
    }
}

1 Ответ

0 голосов
/ 05 марта 2019

сделать, как указано ниже

@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-й секунде каждой минуты.

...