Spring實(shí)現(xiàn)Quartz自動配置的方法詳解
1. 開啟Quartz自動配置
QuartzAutoConfiguration自動為Quartz的自動配置類,它的創(chuàng)建了SchedulerFactoryBean。
首先通過QuartzAutoConfiguration自動配置類可以看到,要實(shí)現(xiàn)Quartz自動配置,需要存在三個(gè)類Scheduler.class, SchedulerFactoryBean.class, PlatformTransactionManager.class,其中
- Scheduler所在包quartz-2.3.0.jar
- SchedulerFactoryBean所在包spring-context-support-5.2.10.RELEASE.jar
- PlatformTransactionManager所在包spring-tx-5.2.10.RELEASE.jar 因此需要確保這三個(gè)Jar包在pom文件中存在。
Quartz的坐標(biāo)示例:
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency>
2. Quartz自動配置的實(shí)現(xiàn)過程
2.1 核心類圖
下圖展示了Quartz的核心類圖,其中
- Scheduler是Quartz調(diào)度器的主接口;
- SchedulerFactory是調(diào)度器工廠接口,用戶獲取調(diào)度器實(shí)例;
- StdScheduler是Scheduler的一個(gè)實(shí)現(xiàn)類,同時(shí)也是一個(gè)代理類,它會將所有的方法調(diào)用直接傳遞給內(nèi)部的QuartzScheduler對象;RemoteScheduler是Scheduler的另一個(gè)實(shí)現(xiàn)類,同時(shí)也是一個(gè)代理類,它會將所有的方法調(diào)用通過RMI傳遞給遠(yuǎn)程的QuartzScheduler對象;
- StdSchedulerFactory是SchedulerFactory的實(shí)現(xiàn)類,它會創(chuàng)建QuartzScheduler對象,并返回其代理對象StdScheduler;
- QuartzSchedulerResources包含所有的資源,包括JobStore、線程池信息等;
- QuartzSchedulerThread是觸發(fā)和執(zhí)行任務(wù)的主線程;
2.2 核心方法
- 準(zhǔn)備SchedulerFactory -> StdSchedulerFactory
- 準(zhǔn)備Scheduler -> StdScheduler
- 注冊監(jiān)聽器
- 注冊任務(wù)和觸發(fā)器
3. 任務(wù)調(diào)度執(zhí)行
3.1 大致流程
任務(wù)調(diào)度的大致流程:
- 如果線程池有可用線程,獲取待執(zhí)行Trigger;
- 獲取觸發(fā)器Trigger的觸發(fā)任務(wù),構(gòu)造JobRunShell;
- 放入線程池執(zhí)行任務(wù),默認(rèn)使用線程池實(shí)現(xiàn) org.quartz.simpl.SimpleThreadPool;
3.2 調(diào)整線程池的大小
線程池的默認(rèn)大小為10,可以通過配置文件調(diào)整默認(rèn)線程池的大小
spring: quartz: properties: org: quartz: threadPool: threadCount: 15
本文從如何開啟Quartz自動配置入手,介紹了自動配置的核心類和自動配置的實(shí)現(xiàn)過程,以及任務(wù)調(diào)度的大致執(zhí)行邏輯,最后介紹了如何通過Spring配置調(diào)整線程池的大小,希望對大家有所幫助。
到此這篇關(guān)于Spring實(shí)現(xiàn)Quartz自動配置的方法詳解的文章就介紹到這了,更多相關(guān)Spring實(shí)現(xiàn)Quartz自動配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea在工具欄中顯示快速創(chuàng)建包和類的圖標(biāo)的詳細(xì)步驟
點(diǎn)擊需要創(chuàng)建包或者類的位置,在點(diǎn)擊對用的圖標(biāo)就可以快速創(chuàng)建類或者包了,下面小編給大家介紹idea在工具欄中顯示快速創(chuàng)建包和類的圖標(biāo)的詳細(xì)步驟,感興趣的朋友一起看看吧2024-02-02簡單說明Java的Struts框架中merge標(biāo)簽的使用方法
這篇文章主要簡單介紹了Java的Struts框架中merge標(biāo)簽的使用方法,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03解決Maven打包只有幾十K,運(yùn)行報(bào)錯no main manifest attribute
這篇文章主要介紹了解決Maven打包只有幾十K,運(yùn)行報(bào)錯no main manifest attribute問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06淺談Java虛擬機(jī)對內(nèi)部鎖的四種優(yōu)化方式
這篇文章主要介紹了淺談Java虛擬機(jī)對內(nèi)部鎖的四種優(yōu)化方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10