Spring Boot 为使用 Quartz Scheduler 提供了一些便利,包括 spring-boot-starter-quartz
“Starter”。如果 Quartz 可用,则自动配置 Scheduler
(通过 SchedulerFactoryBean
抽象)。
自动选择以下类型的 Bean 并将其与 Scheduler
关联:
-
JobDetail
:定义一个特定的 Job。可以使用JobBuilder
API 构建JobDetail
实例。 -
Calendar
-
Trigger
:定义何时触发特定作业。
默认情况下,使用内存中的 JobStore
。但是,如果应用程序中有 DataSource
bean,并且相应地配置了 spring.quartz.job-store-type
属性,则可以配置基于 JDBC
的存储,如以下示例所示:
spring.quartz.job-store-type=jdbc
使用 JDBC
存储时,可以在启动时初始化架构,如以下示例所示:
spring.quartz.jdbc.initialize-schema=always
☀️ 默认情况下,使用 Quartz 库提供的标准脚本检测并初始化数据库。也可以通过设置
spring.quartz.jdbc.schema
属性来提供自定义脚本。
Quartz Scheduler 配置可以使用 Quartz 配置属性( spring.quartz.properties。*
)和 SchedulerFactoryBeanCustomizer
bean进行自定义,它允许程序化 SchedulerFactoryBean
自定义。
☀️ 特别是,
Executor
bean 与调度程序没有关联,因为 Quartz 提供了一种通过spring.quartz.properties
配置调度程序的方法。如果需要自定义任务执行程序,请考虑实现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 {
...
}
}