在Spring中使用計劃任務,有兩種方案可供選擇:1、用Spring原生的計劃任務,使用起來很是簡單,只須要用到@Scheduled註解便可;2、集成Quartz來作計劃任務,須要配置大量的Quartz原生類。
對於第一種來講,侷限性在於不支持計劃任務的集羣,若是有多個計劃任務的項目一塊兒啓動的話,每一個JVM都會執行一遍預約時間的計劃任務。對於Quartz來講,能夠經過集羣來保證在預約的時間點只會執行一次對應的計劃任務。
這裏有一個問題呢,就是Spring集成了Quartz,但卻並無提供像@Scheduled這樣好用的註解。
這個項目就是爲了解決上述問題而生的,讓Quartz的集成變得更簡單直接,同時支持Quartz的集羣模式。 git
先說一下Quartz的集羣。
Quartz的集羣有賴於數據庫的支持,因此這裏咱們須要一個專門的庫。建表的sql在resources/sqls下面(只支持MySQL),根據要用的數據庫引擎選擇不一樣的sql文件。 這裏要注意一下,這個建表的sql文件不是每一個版本都適用的,這裏只適用於quartz的2.2.3版本。若是你要換版本,去官網下載對應版本的quartz,裏面有相應的sql。 建完庫以後,在使用這個Starter的時候,配置文件中須要有這些屬性:spring
quartz.scheduler.instanceName= quartz.datasource.driver-class-name= quartz.datasource.url= quartz.datasource.username= quartz.datasource.password= quartz.datasource.maxConnections=
分別是quartz的實例名以及一些數據庫配置。 sql
@QuartzScheduled和@Scheduled使用起來比較類似,註解到方法上便可。
@QuartzScheduled目前只支持cron表達式,例如:數據庫
/** 凌晨自動同步一次 */ @QuartzScheduled("20 0 0 * * ?") public void execute() { alarmService.sendSyncDingUsers(); }
碼雲:spring-boot-starter-quartzspring-boot