Кварцевая работа не работает с уменьшенным числом нитей - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу настроить количество потоков, назначаемых заданию планировщика Quartz, которое вызывает метод Spring Data.

Класс конфигурации выглядит следующим образом:

@Configuration
public class QuartzConfiguration {

  @Bean
  public JobDetail verificationTokenRemoverJobDetails() {
    return
        JobBuilder
            .newJob(VerificationTokenQuartzRemoverJob.class)
            .withIdentity("Job for verification token remover")
            .storeDurably()
            .build();
  }

  @Bean
  public Trigger verificationTokenRemoverJobTrigger(JobDetail jobDetail) {
    return
        TriggerBuilder
            .newTrigger()
            .forJob(jobDetail)
            .withIdentity("Trigger for verification token remover")
            .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * ? * * *"))
            .build();
  }

  @Bean
  public SchedulerFactoryBean schedulerFactoryBean() {
    SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
    Properties quartzProperties = new Properties();
    quartzProperties.put("org.quartz.threadPool.threadCount", "1");
    quartzProperties.put("spring.quartz.job-store-type", "jdbc");
    quartzProperties.put("spring.quartz.properties.org.quartz.jobStore.isClustered", "true");
    quartzProperties.put("spring.quartz.properties.org.quartz.scheduler.instanceId", "AUTO");
    scheduler.setQuartzProperties(quartzProperties);
    return scheduler;
  }
}

Мой класс работы выглядит следующим образом:

@AllArgsConstructor
@DisallowConcurrentExecution
public class VerificationTokenQuartzRemoverJob implements Job {

  private VerificationTokenRepository verificationTokenRepository;
  private QuartzProperties quartzProperties;

  @Override
  public void execute(JobExecutionContext context) {
    verificationTokenRepository.deleteAllByCreatedLessThan(
        now().minusMinutes(parseLong(quartzProperties.getVerificationTokensOlderThan())));
  }
}

Проблема в том, что я решил уменьшить количество потоков, которые используются во времявыполнение задания, потому что номер по умолчанию 10 слишком много с моей точки зрения. Я добавил bean public SchedulerFactoryBean schedulerFactoryBean(), который уменьшил количество потоков с результатом на полпути, например:

Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 1 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

По-видимому, это должно работать, но, несмотря на выражение CRON (каждые две секунды), задание не начинается свсе и приложение на холостом ходу. Если я закомментирую, третье задание конфигурации bean снова работает с информацией в окне запуска IntelliJ, но с 10 потоками, что нежелательно.

Все, чего я хочу достичь, - настроить мою работу Quartz Job для работы с указанным числом потоков. Более того, я хочу знать, как правильно настроить механизм Quartz, потому что, насколько я понимаю, мой

@Bean
public SchedulerFactoryBean schedulerFactoryBean()

приведет к разрешению одного потока для каждого задания Quartz, так что в случае, если в будущем у меня будет более одногоработа, которая может привести к столкновению, не так ли? Буду благодарен за предложения о том, как достичь цели и настроить Quartz.

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