#spring-boot #quartz-scheduler
Вопрос:
Я использую Quartz с Spring Boot для одной из служб, и, несмотря на кластеризованную конфигурацию и использование аннотации @DisallowConcurrentExecution, я наблюдаю, что задание запускается несколько раз.
Забавно, что это происходит только после перезапуска сервиса. После пары запусков задание «настраивается»в правильный режим выполнения.
Моя конфигурация
spring:
quartz:
properties:
org.quartz.jobStore:
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
isClustered: true
clusterCheckinInterval: 500
acquireTriggersWithinLock: true
tablePrefix: qtz_
org.quartz.scheduler:
instanceName: CompanyProfileScheduler
instanceId: AUTO
job-store-type: jdbc
jdbc:
initialize-schema: never
Моя работа связана с
@Configuration
public class QuartzConfig {
@Bean
public JobDetail companyProfilePublishingSchedulerJobDetails() {
return JobBuilder
.newJob(CompanyProfilePublishingJob.class)
.withIdentity("CompanyProfilePublishingScheduler")
.storeDurably()
.build();
}
@Bean
public Trigger companyProfilePublishingTrigger(final JobDetail companyProfilePublishingSchedulerJobDetails) {
return TriggerBuilder
.newTrigger()
.forJob(companyProfilePublishingSchedulerJobDetails)
.withIdentity("CompanyProfilePublishingSchedulerTrigger")
.withSchedule(
SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(CompanyProfilePublishingJob.RUN_INTERVAL_IN_SECONDS)
.withMisfireHandlingInstructionNextWithRemainingCount()
.repeatForever())
.build();
}
}
Работа
@Slf4j
@Component
@RequiredArgsConstructor
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class CompanyProfilePublishingJob extends QuartzJobBean {
...
}
Ответ №1:
Я думаю, вам нужно показать и свойства подключения к базе данных. Вы создали JobDetail после добавления аннотации @DisallowConcurrentExecution? Потому что только существование этой аннотации управляет одним экземпляром задания за раз.