39. Quartz调度器

Spring Boot包含有spring-boot-starter-quartzStarter,方便了使用Quartz调度器。如果Quartz可用,调度器会被自动配置(通过SchedulerFactoryBean抽象)。

以下类型的bean会被自动捡起并关联到调度器:

  • JobDetail:定义一个特别的Job。JobDetail实例能够容易地用JobBuilderAPI创建

  • Calendar

  • Trigger:定义何时一个特别的Job被触发

默认的,一个内存中JobStore会被使用。但是,配置一个基于JDBC的store是可能的。如果在你的应用中DataSourcebean可用,而且spring.quartz.job-store-type属性如下配置:

spring.quartz.job-store-type=jdbc

当jdbc store被使用,模式能够在启动时被初始化:

spring.quartz.jdbc.initialize-schema=always

数据库会默认被检查,而且会被初始化(使用由Quartz库提供的标准脚本)。也可以使用spring.quartz.jdbc.schema属性提供一个自定义脚本。

Quartz调度器的配置能够使用Quartz配置属性(查看spring.quartz.properties.*),和SchedulerFactoryBeanCustomizerbean(允许程序化的SchedulerFactoryBean配置)来自定义 。

Job能够定义setter来注入数据映射属性。普通的bean也能够用相似的行为来注入:

public class SampleJob extends QuartzJobBean {
private MyService myService;
private String name;
// Inject "MyService" bean
public void setMyService(MyService myService) { ... }
// Inject the "name" job data property
public void setName(String name) { ... }
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
...
}
}