问题描述
我使用弹簧靴的石英cron触发器有问题。触发器不随机触发。在我的代码下面。
QuartConfigClass
@Configuration
public class QuartzConfig {
private static final Logger log = LoggerFactory.getLogger(QuartzConfig.class);
private ApplicationContext applicationContext;
private DataSource dataSource;
public QuartzConfig(ApplicationContext applicationContext,DataSource dataSource) {
this.applicationContext = applicationContext;
this.dataSource = dataSource;
}
@Bean
public SpringBeanJobFactory springBeanJobFactory() {
AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
jobFactory.setApplicationContext(applicationContext);
return jobFactory;
}
@Bean
public Schedulerfactorybean scheduler(Trigger... triggers) {
Schedulerfactorybean schedulerFactory = new Schedulerfactorybean();
Properties properties = new Properties();
properties.setProperty("org.quartz.scheduler.instanceName","Scheduler");
properties.setProperty("org.quartz.scheduler.instanceId","Scheduler1");
properties.setProperty("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool");
properties.setProperty("org.quartz.threadPool.threadCount","99");
schedulerFactory.setoverwriteExistingJobs(true);
schedulerFactory.setAutoStartup(true);
schedulerFactory.setQuartzProperties(properties);
schedulerFactory.setDataSource(dataSource);
schedulerFactory.setJobFactory(springBeanJobFactory());
schedulerFactory.setWaitForJobsToCompleteOnShutdown(true);
if (ArrayUtils.isNotEmpty(triggers)) {
schedulerFactory.setTriggers(triggers);
}
return schedulerFactory;
}
static SimpleTriggerfactorybean createTrigger(JobDetail jobDetail,long pollFrequencyMs,String triggerName) {
log.debug("createTrigger(jobDetail={},pollFrequencyMs={},triggerName={})",jobDetail.toString(),pollFrequencyMs,triggerName);
SimpleTriggerfactorybean factorybean = new SimpleTriggerfactorybean();
factorybean.setJobDetail(jobDetail);
factorybean.setStartDelay(0L);
factorybean.setRepeatInterval(pollFrequencyMs);
factorybean.setName(triggerName);
factorybean.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
factorybean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT);
return factorybean;
}
static crontriggerfactorybean createcrontrigger(JobDetail jobDetail,String cronExpression,String triggerName) {
log.debug("createcrontrigger(jobDetail={},cronExpression={},cronExpression,triggerName);
// To fix an issue with time-based cron jobs
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("CEST"));
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.MILLISECOND,0);
crontriggerfactorybean factorybean = new crontriggerfactorybean();
factorybean.setJobDetail(jobDetail);
factorybean.setCronExpression(cronExpression);
factorybean.setTimeZone(TimeZone.getTimeZone("CEST"));
factorybean.setStartTime(calendar.getTime());
factorybean.setStartDelay(0L);
factorybean.setName(triggerName);
factorybean.setMisfireInstruction(crontrigger.MISFIRE_INSTRUCTION_DO_nothing);
return factorybean;
}
static JobDetailfactorybean createJobDetail(Class jobClass,String jobName,Systems system) {
log.debug("createJobDetail(jobClass={},jobName={})",jobClass.getName(),jobName);
JobDetailfactorybean factorybean = new JobDetailfactorybean();
JobDataMap jobDataMap = new JobDataMap();
factorybean.setName(jobName);
factorybean.setRequestsRecovery(true);
factorybean.setJobClass(jobClass);
factorybean.setDurability(true);
factorybean.afterPropertiesSet();
jobDataMap.put("system",system.getId());
factorybean.setJobDataMap(jobDataMap);
return factorybean;
}
static JobDetailfactorybean createJobDetailRegion(Class jobClass,GeographicArea area) {
log.debug("createJobDetail(jobClass={},jobName);
JobDetailfactorybean factorybean = new JobDetailfactorybean();
JobDataMap jobDataMap = new JobDataMap();
factorybean.setName(jobName);
factorybean.setJobClass(jobClass);
factorybean.setDurability(true);
factorybean.afterPropertiesSet();
jobDataMap.put("area",area.getId());
factorybean.setJobDataMap(jobDataMap);
return factorybean;
}
}
在哪里定义触发器和作业
@Configuration
public class QuartzSubmitJobs {
private static final String CRON_INGESTION_AFS1 = "0 30 13 * * ?";
private static final String CRON_INGESTION_FMS1 = "0 45 13 * * ?";
private static final String CRON_EMEA = "0 52 15 * * ?";
private static final String CRON_NA = "0 03 16 * * ?";
private static final String CRON_LATAM = "0 02 17 * * ?";
private static final String CRON_APAC = "0 07 14 * * ?";
@Bean(name = "ingestionJobAFS1")
public JobDetailfactorybean jobIngestionAFS1() {
return QuartzConfig.createJobDetail(IngestionJob.class,"Ingestion afs1 Job",Systems.AFS1);
}
@Bean(name = "ingestionJobAFS1Trigger")
public crontriggerfactorybean triggerIngestionAFS1(@Qualifier("ingestionJobAFS1") JobDetail jobDetail) {
return QuartzConfig.createcrontrigger(jobDetail,CRON_INGESTION_AFS1,"Ingestion afs1 Trigger");
}
@Bean(name = "ingestionJobFMS1")
public JobDetailfactorybean jobIngestionFMS1() {
return QuartzConfig.createJobDetail(IngestionJob.class,"Ingestion fms1 Job",Systems.FMS1);
}
@Bean(name = "ingestionJobFMS1Trigger")
public crontriggerfactorybean triggerIngestionFMS1(@Qualifier("ingestionJobFMS1") JobDetail jobDetail) {
return QuartzConfig.createcrontrigger(jobDetail,CRON_INGESTION_FMS1,"Ingestion fms1 Trigger");
}
@Bean(name = "emeaJob")
public JobDetailfactorybean emeaJob() {
return QuartzConfig.createJobDetailRegion(TransformationJob.class,"Emea transformation Job",GeographicArea.EMEA);
}
@Bean(name = "emeaJobTrigger")
public crontriggerfactorybean triggerEmea(@Qualifier("emeaJob") JobDetail jobDetail) {
return QuartzConfig.createcrontrigger(jobDetail,CRON_EMEA,"Emea Trigger");
}
@Bean(name = "naJob")
public JobDetailfactorybean naJob() {
return QuartzConfig.createJobDetailRegion(TransformationJob.class,"NA transformation Job",GeographicArea.NA);
}
@Bean(name = "naJobTrigger")
public crontriggerfactorybean triggerNaJob(@Qualifier("naJob") JobDetail jobDetail) {
return QuartzConfig.createcrontrigger(jobDetail,CRON_NA,"naJob Trigger");
}
@Bean(name = "apacJob")
public JobDetailfactorybean apacJob() {
return QuartzConfig.createJobDetailRegion(TransformationJob.class,"APAC transformation Job",GeographicArea.APAC);
}
@Bean(name = "apacJobTrigger")
public crontriggerfactorybean triggerApacJob(@Qualifier("apacJob") JobDetail jobDetail) {
return QuartzConfig.createcrontrigger(jobDetail,CRON_APAC,"apacJob Trigger");
}
@Bean(name = "latamJob")
public JobDetailfactorybean latamJob() {
return QuartzConfig.createJobDetailRegion(TransformationJob.class,"LATAM transformation Job",GeographicArea.LATAM);
}
@Bean(name = "latamJobTrigger")
public crontriggerfactorybean triggerLatamJob(@Qualifier("latamJob") JobDetail jobDetail) {
return QuartzConfig.createcrontrigger(jobDetail,CRON_LATAM,"latamJob Trigger");
}
在数据库表中,触发器状态始终处于等待状态,我认为是正确的。而且,当我更新表达式时,它们也会在db上正确更新,但是就像我随机说的那样,它不会触发。我在https://dzone.com/articles/adding-quartz-to-spring-boot处找到了代码。有人遇到同样的问题并且可以提供帮助吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)