Весенняя загрузка с планировщиком Quartz: Кластеризация не работает

#java #spring #spring-boot #quartz-scheduler

Вопрос:

Я использую зависимость spring-boot-starter-quartz, и в приложении у меня есть следующая конфигурация.yaml для кварца

   
spring: 
  quartz:
    job-store-type: jdbc
    jdbc:
      initialize-schema: always
    properties:
      org:
        quartz:
          scheduler:
            instanceId: AUTO
          threadPool:
            threadCount: 2
          jobStore:
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
            useProperties: false
            tablePrefix: SCHEDULER_
            isClustered: true
            clusterCheckinInterval: 20000
 

У меня есть следующие компоненты, определенные в конфигурации Quartz

     @Bean
    JobDetailFactoryBean notificationJobDetail() {
        JobDetailFactoryBean bean = new JobDetailFactoryBean();
        bean.setJobClass(NotificationJob.class);
        return bean;
    }

    @Bean
    CronTriggerFactoryBean notificationCronTrigger() {
        CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
        cronTriggerFactoryBean.setCronExpression(schedulerProperty.getCronNotification());
        cronTriggerFactoryBean.setJobDetail(Objects.requireNonNull(notificationJobDetail().getObject()));
        return cronTriggerFactoryBean;
    }

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setTriggers(notificationCronTrigger().getObject());
        schedulerFactoryBean.setApplicationContextSchedulerContextKey(QUARTZ_APPLICATION_CONTEXT);
        return schedulerFactoryBean;
    }
 

Но некоторые свойства application.conf, я думаю, не читаются Quartz, и поэтому кластеризация не работает. В журналах это показывает

 Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

 

Комментарии:

1. Вы упомянули, что имя вашего файла конфигурации-application.conf. Что произойдет, если вы переименуете его в application.yml? Spring Boot будет считывать файлы конфигурации application.properties и application.yml/yaml.

2. Извините, на самом деле это приложение.yaml. Обновит вопрос.

3. Автоматическая настройка Spring автоматически создает файл SchedulerFactoryBean с конфигурацией из приложения. файл yaml, поскольку SchedulerFactoryBean создается вручную с аннотацией @Bean, свойства необходимо вручную задать для компонента ref.github.com/spring-projects/spring-boot/blob /…