Spring-Boot с кварцем и несколькими планировщиками - PullRequest
0 голосов
/ 13 сентября 2018

Я работаю со сценарием, где у нас есть одна база данных с несколькими схемами, одна схема для каждого клиента. Это позволяет каждому клиенту устанавливать различные графики для своих работ. Все схемы имеют одинаковый набор заданий, отличаются только расписания.

Мне нужно написать одно приложение Spring-Boot для запуска всех заданий из всех схем.

Похоже, что это можно сделать, определив разные свойства quartz.properties для каждой схемы, а затем настроив разные планировщики для каждой из них, например:

@SpringBootApplication
@Configuration
public class MyApplication{

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

    @Bean
    public Scheduler schedulerA(Trigger trigger, JobDetail job) {
        StdSchedulerFactory factory = new StdSchedulerFactory();
        factory.initialize(new ClassPathResource("quartzA.properties").getInputStream());

        Scheduler scheduler = factory.getScheduler();
        scheduler.setJobFactory(springBeanJobFactory());
        scheduler.scheduleJob(job, trigger);

        scheduler.start();
        return scheduler;
    }

    @Bean
    public Scheduler schedulerB(Trigger trigger, JobDetail job) {
        StdSchedulerFactory factory = new StdSchedulerFactory();
        factory.initialize(new ClassPathResource("quartzB.properties").getInputStream());

        Scheduler scheduler = factory.getScheduler();
        scheduler.setJobFactory(springBeanJobFactory());
        scheduler.scheduleJob(job, trigger);

        scheduler.start();
        return scheduler;
    }    
}

Мой вопрос: это правильно? Могу ли я просто определить эти планировщики в моем классе SpringBootApplication, аннотированном @Configuration, и ожидать, что он будет работать (при условии, что свойства правильные)? Я что-то упустил?

1 Ответ

0 голосов
/ 13 сентября 2018

Мой вопрос: это правильно? Могу ли я просто определить эти планировщики в мой класс SpringBootApplication с аннотацией @ Configuration

Это правильно. В качестве альтернативы вы можете использовать аннотацию Spring @Schelduled с Cron, определенным в файлах свойств.

@Scheduled(cron = "0 15 10 15 * ?")
public void scheduleTaskUsingCronExpression() {
.
.
.

Но если вам нужен больший контроль над заданиями, такими как восстановление после отказа, политика повторных попыток или отслеживание и запуск / повторный запуск заданий с панели мониторинга. Подумайте о spring-batch

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