我已经使用SpringBoot和Quartz成功开发了一个应用程序,它只使用为该特定作业定义的Cron表达式执行单个作业 . 我的实现主要基于以下文章中的信息 .
https://chynten.wordpress.com/2016/06/17/quartz-with-databse-and-spring-4/
在那里,正如您所看到的,作业触发是使用封装cron表达式的bean完成的 .
@Bean
public Trigger simpleJobTrigger(@Qualifier("simpleJobDetail") JobDetail jobDetail) {
CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
factoryBean.setJobDetail(jobDetail);
factoryBean.setStartDelay(0L);
factoryBean.setName("test-trigger");
factoryBean.setStartTime(LocalDateTime.now().toDate());
factoryBean.setCronExpression("0/20 * * * * ?");
factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
try {
factoryBean.afterPropertiesSet();
} catch (ParseException e) {
e.printStackTrace();
}
return factoryBean.getObject();
}
现在,我需要创建多个应该根据自己的cron表达式触发的作业 . 在上面的例子中,整个项目只有一个cron,因此我没有问题 . 但现在,不同的工作应该有不同的调度 .
如何扩展当前的实现以支持具有不同crons的多个作业?是的,我对此做了一些研究,但找不到有关如何配置Spring启动bean以满足我的要求的任何信息 .
一些例子使用quartz JobBuilder
来定义作业 . 这是我应该遵循的方式,还是可以扩展我当前的实现以支持多个工作?
以下链接中的问题看起来非常相似,但我无法理解如何将不同的cron表达式和其他指令(如失火指令)分别传递给每个作业 .
Autowiring in Quartz multiple Jobs with Spring Boot not working
2 回答
您可以在
schedulerFactoryBean()
中添加多个以逗号分隔的触发器作为setTriggers
方法的参数,例如您提到的方法,因为setTriggers
接受触发器的varagrs作为参数参考SchedulerFactoryBean API
每个触发器可以有不同的作业详细信息
你只需要做这样的事情 . 继续为每个新工作添加新bean