Я хочу настроить количество потоков, назначаемых заданию планировщика 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.