日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot2.0新特性 - Quartz自动化配置集成

發布時間:2025/4/5 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot2.0新特性 - Quartz自动化配置集成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.jianshu.com/p/056281e057b3

在新版本的SpringBoot2.0發布后,急迫嘗鮮的我將相關的項目已經更換為最新版本,在SpringBoot源碼GitHub看到更新日志,表明了針對Quartz新版本進行了 AutoConfiguration自動化配置,省去了很多繁瑣的配置。

官網更新日志

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-memory JobStores, or a full JDBC-based store. All JobDetail, Calendar and Trigger beans from your Spring application context will be automatically registered with the Scheduler.
For more details read the new "Quartz Scheduler" section of the reference documentation.

SpringBoot2.0版本集成了Quartz2.3.0官網最新版本。

本章目標

使用SpringBoot2.0新特性完成Quartz自動化配置。

SpringBoot 企業級核心技術學習專題


專題專題名稱專題描述
001Spring Boot 核心技術講解SpringBoot一些企業級層面的核心組件
002Spring Boot 核心技術章節源碼Spring Boot 核心技術簡書每一篇文章碼云對應源碼
003Spring Cloud 核心技術對Spring Cloud核心技術全面講解
004Spring Cloud 核心技術章節源碼Spring Cloud 核心技術簡書每一篇文章對應源碼
005QueryDSL 核心技術全面講解QueryDSL核心技術以及基于SpringBoot整合SpringDataJPA
006SpringDataJPA 核心技術全面講解SpringDataJPA核心技術
007SpringBoot核心技術學習目錄SpringBoot系統的學習目錄,敬請關注點贊!!!

構建項目

在前面章節第四十章:基于SpringBoot & Quartz完成定時任務分布式多節點負載持久化內我們已經通過添加配置的方式完成集成,為了本章的方便直接復制之前的項目,在基礎上進行修改。
打開pom.xml配置文件,SpringBoot為我們提供了對應的依賴,我們將之前的quartz相關依賴刪除,替換為spring-boot-starter-quartz,如下所示:

<!--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配置類

在之前章節我們使用QuartzConfiguration配置類來完成了Quartz需要的一系列配置,如:JobFactory、SchedulerFactoryBean等,在我們添加spring-boot-starter-quartz依賴后就不需要主動聲明工廠類,因為spring-boot-starter-quartz已經為我們自動化配置好了。

自動化配置源碼

我們找到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做出全部的設置變更。

spring.quartz配置

看到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需要的數據表通過配置方式進行初始化。

測試

  • 啟動項目
  • 打開瀏覽器訪問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,我們只需要添加依賴、添加配置即可,別的不需要做任何代碼編寫。



    作者:恒宇少年
    鏈接:https://www.jianshu.com/p/056281e057b3
    來源:簡書
    簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

    轉載于:https://www.cnblogs.com/davidwang456/articles/10316054.html

    總結

    以上是生活随笔為你收集整理的SpringBoot2.0新特性 - Quartz自动化配置集成的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。