Spring實(shí)現(xiàn)Quartz自動配置的方法詳解
1. 開啟Quartz自動配置
QuartzAutoConfiguration自動為Quartz的自動配置類,它的創(chuàng)建了SchedulerFactoryBean。

首先通過QuartzAutoConfiguration自動配置類可以看到,要實(shí)現(xiàn)Quartz自動配置,需要存在三個類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 因此需要確保這三個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的一個實(shí)現(xiàn)類,同時也是一個代理類,它會將所有的方法調(diào)用直接傳遞給內(nèi)部的QuartzScheduler對象;RemoteScheduler是Scheduler的另一個實(shí)現(xiàn)類,同時也是一個代理類,它會將所有的方法調(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)文章
SpringBoot實(shí)現(xiàn)支付寶沙箱支付的完整步驟
沙箱支付是一種用于模擬真實(shí)支付環(huán)境的測試工具,它提供了一個安全的測試環(huán)境,供開發(fā)者在不影響真實(shí)交易的情況下進(jìn)行支付功能的開發(fā)和測試,這篇文章給大家介紹了SpringBoot實(shí)現(xiàn)支付寶沙箱支付的完整步驟,需要的朋友可以參考下2024-04-04
使用proguard對maven構(gòu)建的springboot項(xiàng)目進(jìn)行混淆方式
文章介紹了如何使用ProGuard對Maven構(gòu)建的Spring Boot項(xiàng)目進(jìn)行混淆,并解決混淆后可能遇到的版本兼容性問題和類名沖突問題,主要步驟包括下載高版本的ProGuard、配置POM文件、添加ProGuard配置文件、修改Spring Boot啟動文件以避免類名沖突2024-11-11
解決springboot報錯Failed?to?parse?multipart?servlet?request
在使用SpringBoot開發(fā)時,通過Postman發(fā)送POST請求,可能會遇到因臨時目錄不存在而導(dǎo)致的MultipartException異常,這通常是因?yàn)镺S系統(tǒng)(如CentOS)定期刪除/tmp目錄下的臨時文件,解決方案包括重啟項(xiàng)目2024-10-10
Java字節(jié)緩存流的構(gòu)造方法之文件IO流
這篇文章主要介紹了Java字節(jié)緩存流的構(gòu)造方法之文件IO流,同時也介紹了字符流中的一些相關(guān)的內(nèi)容,并且通過大量的案例供大家理解。最后通過一些經(jīng)典的案例幫助大家對前面所學(xué)的知識做了一個綜合的應(yīng)用,需要的朋友可以參考一下2022-04-04
Fluent Mybatis零xml配置實(shí)現(xiàn)復(fù)雜嵌套查詢
本文主要介紹了Fluent Mybatis零xml配置實(shí)現(xiàn)復(fù)雜嵌套查詢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08

