在新版本的SpringBoot2.0
發佈後,急迫嚐鮮的我將相關的項目已經更換爲最新版本,在SpringBoot
源碼GitHub
看到更新日誌,代表了針對Quartz
新版本進行了 AutoConfiguration
自動化配置,省去了不少繁瑣的配置。html
Auto-configuration support is now include for the Quartz Scheduler. We’ve also added a new
spring-boot-starter-quartz
starter POM. You can use in-memoryJobStores
, or a full JDBC-based store. AllJobDetail
,Calendar
andTrigger
beans from your Spring application context will be automatically registered with theScheduler
. For more details read the new "Quartz Scheduler" section of the reference documentation.node
SpringBoot2.0
版本集成了Quartz2.3.0
官網最新版本。git
使用SpringBoot2.0
新特性完成Quartz
自動化配置。web
專題 | 專題名稱 | 專題描述 |
---|---|---|
001 | Spring Boot 核心技術 | 講解SpringBoot一些企業級層面的核心組件 |
002 | Spring Boot 核心技術章節源碼 | Spring Boot 核心技術簡書每一篇文章碼雲對應源碼 |
003 | Spring Cloud 核心技術 | 對Spring Cloud核心技術全面講解 |
004 | Spring Cloud 核心技術章節源碼 | Spring Cloud 核心技術簡書每一篇文章對應源碼 |
005 | QueryDSL 核心技術 | 全面講解QueryDSL核心技術以及基於SpringBoot整合SpringDataJPA |
006 | SpringDataJPA 核心技術 | 全面講解SpringDataJPA核心技術 |
007 | SpringBoot核心技術學習目錄 | SpringBoot系統的學習目錄,敬請關注點贊!!! |
在前面章節第四十章:基於SpringBoot & Quartz完成定時任務分佈式多節點負載持久化內咱們已經經過添加配置的方式完成集成,爲了本章的方便直接複製以前的項目,在基礎上進行修改。 打開pom.xml
配置文件,SpringBoot
爲咱們提供了對應的依賴,咱們將以前的quartz
相關依賴刪除,替換爲spring-boot-starter-quartz
,以下所示:spring
<!--quartz相關依賴-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>${quartz.version}</version>
</dependency>
>>>>替換爲:>>>>
<!--quartz依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
......
複製代碼
在以前章節咱們使用QuartzConfiguration
配置類來完成了Quartz
須要的一系列配置,如:JobFactory
、SchedulerFactoryBean
等,在咱們添加spring-boot-starter-quartz
依賴後就不須要主動聲明工廠類,由於spring-boot-starter-quartz
已經爲咱們自動化配置好了。sql
咱們找到Idea
的External Libraries
而且展開spring-boot-autoconfigure-2.0.0.RELEASE.jar
,找到org.springframework.boot.autoconfigure.quartz
,該目錄就是SpringBoot
爲咱們提供的Quartz
自動化配置源碼實現,在該目錄下有以下所示幾個類:數據庫
AutowireCapableBeanJobFactory
該類替代了咱們以前在QuartzConfiguration
配置類的AutowiringSpringBeanJobFactory
內部類實現,主要做用是咱們自定義的QuartzJobBean
子類被Spring IOC
進行託管,能夠在定時任務類內使用注入任意被Spring IOC
託管的類。JobStoreType
該類是一個枚舉類型,定義了對應application.yml
、application.properties
文件內spring.quartz.job-store-type
配置,其目的是配置quartz
任務的數據存儲方式,分別爲:MEMORY(內存方式:默認
)、JDBC(數據庫方式)。QuartzAutoConfiguration
該類是自動配置的主類,內部配置了SchedulerFactoryBean
以及JdbcStoreTypeConfiguration
,使用QuartzProperties
做爲屬性自動化配置條件。QuartzDataSourceInitializer
該類主要用於數據源初始化後的一些操做,根據不一樣平臺類型的數據庫進行選擇不一樣的數據庫腳本。QuartzProperties
該類對應了spring.quartz
在application.yml
、application.properties
文件內開頭的相關配置。SchedulerFactoryBeanCustomizer
這是一個接口,咱們實現該接口後而且將實現類使用Spring IOC
託管,能夠完成SchedulerFactoryBean
的個性化設置,這裏的設置徹底能夠對SchedulerFactoryBean
作出所有的設置變動。看到QuartzAutoConfiguration
類源碼,咱們知道了,想要使用自動化配置,須要知足QuartzProperties
屬性配置類的初始化,因此咱們須要再application.yml
、application.properties
配置文件內添加對應的配置信息,以下所示:瀏覽器
spring:
quartz:
#相關屬性配置
properties:
org:
quartz:
scheduler:
instanceName: clusteredScheduler
instanceId: AUTO
jobStore:
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix: QRTZ_
isClustered: true
clusterCheckinInterval: 10000
useProperties: false
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 10
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true
#數據庫方式
job-store-type: jdbc
#初始化表結構
#jdbc:
#initialize-schema: never
複製代碼
spring.quartz.properties
該配置其實代替了以前的quartz.properties
,咱們把以前quartz.properties
配置文件內的全部配置轉換成YUML
風格,對應的添加在該配置下便可,在QuartzAutoConfiguration
類內,會自動調用SchedulerFactoryBean
的setQuartzProperties
方法,把spring.quartz.properties
內的全部配置進行設置。@Bean
@ConditionalOnMissingBean
public SchedulerFactoryBean quartzScheduler() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobFactory(new AutowireCapableBeanJobFactory(this.applicationContext.getAutowireCapableBeanFactory()));
// 若是配置了spring.quartz.properties
if (!this.properties.getProperties().isEmpty()) {
// 將全部properties設置到QuartzProperties
schedulerFactoryBean.setQuartzProperties(this.asProperties(this.properties.getProperties()));
}
......省略部分代碼
複製代碼
spring.quartz.job-store-type
設置quartz
任務的數據持久化方式,默認是內存方式,咱們這裏沿用以前的方式,配置JDBC
以使用數據庫方式持久化任務。spring.quartz.jdbc.initialize-schema
該配置目前版本沒有生效,根據官網文檔查看,其目的是自動將
quartz
須要的數據表經過配置方式進行初始化。bash
http://localhost:8083/good/save?name=abcd&unit=斤&price=12.5
進行添加定時任務22:55:18.812 INFO 17161 --- [ main] c.hengyu.chapter39.Chapter47Application : 【【【【【【定時任務分佈式節點 - quartz-cluster-node-second 已啓動】】】】】】
2018-03-06 22:55:20.772 INFO 17161 --- [uartzScheduler]] o.s.s.quartz.SchedulerFactoryBean : Starting Quartz Scheduler now, after delay of 2 seconds
2018-03-06 22:55:20.793 INFO 17161 --- [uartzScheduler]] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_yuqiyudeMacBook-Pro.local1520348117910 started.
2018-03-06 22:56:20.103 INFO 17161 --- [nio-8083-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-03-06 22:56:20.103 INFO 17161 --- [nio-8083-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2018-03-06 22:56:20.121 INFO 17161 --- [nio-8083-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 18 ms
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into basic_good_info (bgi_name, bgi_price, bgi_unit, bgi_id) values (?, ?, ?, ?)
2018-03-06 22:56:20.268 TRACE 17161 --- [nio-8083-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [abcd]
2018-03-06 22:56:20.269 TRACE 17161 --- [nio-8083-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [NUMERIC] - [12.5]
2018-03-06 22:56:20.269 TRACE 17161 --- [nio-8083-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [VARCHAR] - [斤]
2018-03-06 22:56:20.269 TRACE 17161 --- [nio-8083-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [BIGINT] - [1]
2018-03-06 22:56:47.253 INFO 17161 --- [eduler_Worker-1] c.h.c.timers.GoodStockCheckTimer : 分佈式節點quartz-cluster-node-second,執行庫存檢查定時任務,執行時間:Tue Mar 06 22:56:47 CST 2018
2018-03-06 22:57:00.012 INFO 17161 --- [eduler_Worker-2] c.h.c.timers.GoodStockCheckTimer : 分佈式節點quartz-cluster-node-second,執行庫存檢查定時任務,執行時間:Tue Mar 06 22:57:00 CST 2018
2018-03-06 22:57:20.207 INFO 17161 --- [eduler_Worker-3] c.hengyu.chapter39.timers.GoodAddTimer : 分佈式節點quartz-cluster-node-second,商品添加完成後執行任務,任務時間:Tue Mar 06 22:57:20 CST 2018
2018-03-06 22:57:30.013 INFO 17161 --- [eduler_Worker-4] c.h.c.timers.GoodStockCheckTimer : 分佈式節點quartz-cluster-node-second,執行庫存檢查定時任務,執行時間:Tue Mar 06 22:57:30 CST 2018
2018-03-06 22:58:00.014 INFO 17161 --- [eduler_Worker-5] c.h.c.timers.GoodStockCheckTimer : 分佈式節點quartz-cluster-node-second,執行庫存檢查定時任務,執行時間:Tue Mar 06 22:58:00 CST 2018
複製代碼
根據控制檯內容,能夠看到咱們的定時任務已經正常的開始執行,固然咱們若是打開多個節點
一樣能夠實現任務自動漂移
的效果。微信
綜上所述咱們已經完成了SpringBoot2.0
集成Quartz
,咱們只須要添加依賴、添加配置便可,別的不須要作任何代碼編寫。
本章源碼已經上傳到碼雲: SpringBoot配套源碼地址:gitee.com/hengboy/spr… SpringCloud配套源碼地址:gitee.com/hengboy/spr… SpringBoot相關係列文章請訪問:目錄:SpringBoot學習目錄 QueryDSL相關係列文章請訪問:QueryDSL通用查詢框架學習目錄 SpringDataJPA相關係列文章請訪問:目錄:SpringDataJPA學習目錄,感謝閱讀!