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 {
...
}
}