SpringBoot自動配置Quartz的實現步驟
SpringBoot2.0版本之後,其中增加瞭對Quartz框架的支持內容,可以實現通過容器來自動配置Quartz。
1. 依賴信息
springboot2.x版本時,出現瞭spring-boot-starter-quartz這一起步依賴,其中提供瞭很多豐富功能。
1.1 原依賴信息
之前引入quartz框架時,必須引入的依賴信息有:
<!--quartz核心包--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> <!--添加Scheduled坐標--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <!--Spring tx 坐標--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </dependency>
依賴引入之後,項目的maven中的依賴管理信息
1.2 新的依賴
使用新的spring-boot-starter-quartz依賴代替原有三種依賴信息:
<!--springboot2-quartz依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
依賴引入後,項目maven管理的依賴信息
1.3 依賴變化
可以看出,springBoot2.0之後使用一個starter依賴就相當於引入三個依賴信息,spring-boot-starter-quartz本質上與引入三個依賴信息相同。
2. 新的依賴使用
2.1 默認配置可用
使用新的依賴信息後,對於原有的配置方式是完全可行的,如原有的quartz使用流程:
- 定義任務實現Job,並重寫其中的execute()方法,添加執行的任務
- 配置Quartz配置類,配置類中註入Job、Trigger、Scheduler對象
- 配置類或者啟動類上使用@EnableScheduling註解開啟定時任務
- 項目啟動時會自動執行配置的定時任務
在新的依賴支持下項目執行效果完全一致。
2.2 使用自動配置
如果說springboot2.0之後的starter依賴帶來的變化,最主要的就是依賴包中封裝瞭quartz的自動配置相關內容。
quartz相關的自動配置類是springboot的autoconfigure自動配置類包中提供的支持,如下
- QuartzAutoConfiguration,自動配置類,其中會自動初始化配置調度器類、數據源信息、和數據存儲類型等
- QuartzProperties,配置文件類,對於quartz的配置信息,使用統一的application.yml/properties管理,jar包中提供瞭一個QuartzProperties類專門用來獲取配置文件中quartz相關的配置信息。
- 該類存在org.springframework.boot.autoconfigure.quartz springboot自動配置包中,獲取配置文件中以”spring.quartz”開頭的配置
- QuartzDataSourceInitializer,初始化數據源操作,直接使用spingboot項目的數據源配置
- JobStoreType,定義quartz數據存儲類型的枚舉類,有MEMORY/JDBC兩個值
- SchedulerFactoryBeanCustomizer,功能接口,可以通過實現該接口來實現調度器類的自定義配置
使用自動配置類流程
- 使用starter依賴信息
- 使用 application.yml/properties 統一管理quartz配置
- 移除使用@Configuration標註的自動配置類,否則該配置類會代替自動配置
2.3 配置信息:
在application.yml文件中配置數據持久化:
server: port: 8082 spring: datasource: url: jdbc:mysql://10.35.219.24:3306/test282?autoReconnect=true&useUnicode=true&characterEncoding=utf-8 username: mysql password: Dh2236@db! driver-class-name: com.mysql.cj.jdbc.Driver 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: 15 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true #數據庫方式 job-store-type: jdbc
數據庫存儲方式字段job-store-typ可以取值為jdbc或memory,如果需要設置為memory存儲在內存中時,需要則需要更改jobStore.class為內存類型,並移除jonStore下的其他配置信息;否則會啟動報錯。
3. 總結
SpringBoot的自動配置帶來瞭很大的效率,減去瞭很多重復的配置、也增加瞭代碼的簡潔性。
但是,自動配置往往也會帶來一些問題,如自動配置沖突等情況,往往需要手動來選擇最終使用的配置對象。
到此這篇關於SpringBoot自動配置Quartz的實現步驟的文章就介紹到這瞭,更多相關SpringBoot自動配置Quartz內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 使用resty Quartz執行定時任務的配置方法
- 一篇文章帶你瞭解Java SpringBoot四大核心組件
- Springboot基礎學習之初識SpringBoot
- SpringBoot如何自定義starter
- SpringBoot特點之依賴管理和自動裝配(實例代碼)