Как запланировать работу cron при весенней загрузке без использования аннотации @Scheduled () - PullRequest
1 голос
/ 08 июля 2019

При весенней загрузке можно ли запланировать весеннее задание, не используя @Scheduled аннотацию для метода?

Я работаю с весенней работой в весенней загрузке. Я хочу запланировать работу с помощью выражения cron, но без использования @Scheduled (cron = "") аннотации к методу.

Я знаю, что могу запланировать работу внутри этого метода, как показано ниже.

@ Запланировано (cron = "0 10 10 10 *?")

public void execute () {

/ * какой-то код работы * /

}

Но я хочу, чтобы оно было динамичным, чтобы я мог взять выражение cron в качестве ввода от пользователя и запланировать его.

1 Ответ

0 голосов
/ 09 июля 2019

Я пришел с рабочим примером, так как я нашел ваш вопрос интересным и ранее интересовался этой проблемой.Он полностью основан на исходном коде, поэтому я понятия не имею, приближается ли он к наилучшей практике.Тем не менее, вы можете настроить его под свои нужды.К вашему сведению, вам не обязательно создавать новый объект ScheduledTaskRegistrar - я подумал, что, поскольку ваша цель - это динамический планировщик, вам не будет интересно определять свои задачи исключительно перезаписанным методом.

@SpringBootApplication
public class TaskScheduler implements SchedulingConfigurer, CommandLineRunner {

    public static void main(String[] args){SpringApplication.run(TaskScheduler.class, args);}

    List<CronTask> cronTasks;

    @Override
    public void run(String... args) throws Exception {
        CronTask task = this.createCronTask(new Runnable() {
            @Override
            public void run() {
                System.out.println(LocalDateTime.now());
            }
        }, "1/10 * * * * *");

        ScheduledTaskRegistrar taskRegistrar = new ScheduledTaskRegistrar();
        taskRegistrar.addCronTask(task);
        configureTasks(taskRegistrar);
        Thread.sleep(51);

        taskRegistrar.destroy();
        taskRegistrar = null;

        ScheduledTaskRegistrar taskRegistrar2 = new ScheduledTaskRegistrar();
        taskRegistrar2.addCronTask(task);
        configureTasks(taskRegistrar2);

    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        // "Calls scheduleTasks() at bean construction time" - docs
        taskRegistrar.afterPropertiesSet();
    }

    public CronTask createCronTask(Runnable action, String expression) {
        return new CronTask(action, new CronTrigger(expression));
    }

}

У меня есть опыт использования заданий cron в Azure и других местах.Программируя на Java, я обычно использовал @Scheduled с фиксированным временем просто для простоты.Надеюсь, что это полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...