一:spring boot 整合 quartz 可以有两种形式:javaConfig 和 xml。使用哪种 方式看项目需求。这里采用xml ,源码:https://github.com/yoxiyoxiiii/springbootQuartzDemo.git
1:pom.xml 配置:(排除springboot 的基本配置,springboot 也有 和 quartz 整合的启动依赖,可以参看 github 上 springboot 的 spring-boot-samples:
quartz 的pom:
org.quartz-scheduler
quartz-jobs
2.2.3
org.quartz-scheduler
quartz
2.2.3
org.springframework
spring-context-support
4.3.13.RELEASE
org.springframework
spring-tx
4.3.13.RELEASE
org.projectlombok
lombok
1.16.18
启动类 App.java
/**
* Hello world!
* 使用 xml 的方式来配置 quartz 的job
* @ImportResource(locations = "classpath:quartz-spring.xml") 加载 配置文件
在resources 下创建 quartz-spring.xml
*/
@SpringBootApplication
@ImportResource(locations = "classpath:quartz-spring.xml")
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class, args);
}
}
定义jobFactory 使在quartz 中注入bean
/**
* 使 容器中的bean 可以注入在 quartz 框架中。
*/
public class JobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
自定义job、job2
---job1:
@Slf4j
public class TestJob {
public void job() {
log.info("TestJob.job {}" ,"run ..");
}
}
------------
job2:
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class TestJob2 {
public void job2() {
log.info("TestJob2 job2 {}", "run ....");
}
}
将自定义的job 配置到 quartz 需要以下几个步骤:
1:将 自定义的 job 和配置 到 jobDetail 中,jobDetail 是quartz 中对job的基本描述。
2:配置 触发器(定时器Trigger)并将定时器和 jobDetail 关联。
3:将触发器配置到 调度器中(scheduler)。
下面开始配置:在quartz-spring.xml 中配置
1:配置job(job2 同样的配置方法)
2:配置触发器
*/5 * * * * ?
3:配置 scheduler 任务调度器
注意:同样的配置可以转换为java config 的形式。同样可以实现多任务。