39. Quartz Scheduler
Spring Boot为使用Quartz Scheduler提供了一些方便,引入spring-boot-starter-quartz
“启动器”,如果Quartz是可用的,则将自动配置Scheduler
(通过抽象的SchedulerFactoryBean
)。
下列类型的bean将自动被拾取并与Scheduler
关联:
-
JobDetail
:定义一个特定的工作,JobDetail
实例可以使用JobBuilder
API构建。 Calendar
-
Trigger
:定义何时触发特定工作。
默认情况下,使用内存中的JobStore
,但是,如果应用程序中有DataSource
bean并且spring.quartz.job-store-type
属性已经相应地配置,那么可以配置基于jdbc的存储,如下面的示例所示:
spring.quartz.job-store-type=jdbc
当使用JDBC存储时,可以在启动时初始化schema,如下例所示:
spring.quartz.jdbc.initialize-schema=always
默认情况下,通过使用Quartz库提供的标准脚本检测和初始化数据库,还可以通过设置
spring.quartz.jdbc.schema
属性提供自定义脚本。
可以使用Quartz配置属性定制Quartz Scheduler配置(spring.quartz.properties.*)和SchedulerFactoryBeanCustomizer
bean,它允许编程SchedulerFactoryBean
bean进行定制化。
特别是,
Executor
bean不与scheduler相关联,因为Quartz提供了一种通过
spring.quartz.properties
配置scheduler的方法,如果需要自定义任务执行程序,请考虑实现
SchedulerFactoryBeanCustomizer
。
Jobs可以定义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 {
...
}
}