日韩精品成人无码专区免费-国产99久久久久久免费看-国产精品丝袜久久久久久不卡-国产精品无码一区二区三区

springboot quartz 以持久化的方式實(shí)現(xiàn)定時任務(wù)

發(fā)布時間:2024-06-11 點(diǎn)擊:290
這篇文章給大家介紹springboot quartz以持久化的方式實(shí)現(xiàn)定時任務(wù),詳情如下所示:
篇幅較長,耐心的人總能得到最后的答案小生第一次用quartz做定時任務(wù),不足之處多多諒解。
首先
在springboot項(xiàng)目里做定時任務(wù)是比較簡單的,最簡單的實(shí)現(xiàn)方式是使用@scheduled注解,然后在application啟動類上使用@enablescheduling開啟定時任務(wù)。
示例
@springbootapplication@enableschedulingpublic class application { public static void main(string[] args) { springapplication.run(application.class, args); } // cron為每秒執(zhí)行一次 @scheduled(cron = "* * * * * ?") public void print(){ system.out.println("執(zhí)行定時任務(wù)"); }}######結(jié)果
執(zhí)行定時任務(wù)
執(zhí)行定時任務(wù)
執(zhí)行定時任務(wù)
執(zhí)行定時任務(wù)
執(zhí)行定時任務(wù)
執(zhí)行定時任務(wù)
執(zhí)行定時任務(wù)
執(zhí)行定時任務(wù)
簡單的定時任務(wù)就可以用這種方式來做,cron表達(dá)式的結(jié)果為任務(wù)執(zhí)行的間隔時間。
然而
實(shí)際開發(fā)中,我們的任務(wù)可能有很多,且需要手動操作單個/全部的任務(wù),比如添加、開啟、停止、繼續(xù)等等操作。那么伴隨著(千牛b類。。。)的bgm有請quartz登場。
quartz
整合
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-quartz</artifactid> </dependency>quartz的三要素
調(diào)度器scheduler啟動觸發(fā)器去執(zhí)行任務(wù)觸發(fā)器trigger
用來定義job(任務(wù))觸發(fā)條件、觸發(fā)時間,觸發(fā)間隔,終止時間等
任務(wù)job
具體要執(zhí)行的任務(wù)內(nèi)容
使用
使用quartz是需要配置文件的,quartz.properties在quartz的jar包的org.quartz包下可以找到默認(rèn)的配置文件quartz.properties
# default properties file for use by stdschedulerfactory# to create a quartz scheduler instance, if a different# properties file is not explicitly specified.## 名字org.quartz.scheduler.instancename: defaultquartzschedulerorg.quartz.scheduler.rmi.export: falseorg.quartz.scheduler.rmi.proxy: falseorg.quartz.scheduler.wrapjobexecutioninusertransaction: false# 實(shí)例化threadpool時,使用的線程類為simplethreadpoolorg.quartz.threadpool.class: org.quartz.simpl.simplethreadpool# 線程總個數(shù)org.quartz.threadpool.threadcount: 10# 線程的優(yōu)先級org.quartz.threadpool.threadpriority: 5org.quartz.threadpool.threadsinheritcontextclassloaderofinitializingthread: trueorg.quartz.jobstore.misfirethreshold: 60000# 持久化方式,默認(rèn)持久化在內(nèi)存中,后面我們使用db的方式org.quartz.jobstore.class: org.quartz.simpl.ramjobstorequartz任務(wù)持久化到db則需要一些官方定義的數(shù)據(jù)庫表,表的sql文件可以在quartz的jar包里找到
坐標(biāo)org.quartz.impl.jdbcjobstore,可以看到里面有很多sql文件,有各種數(shù)據(jù)庫的,咱們用mysql的,咱們不需要手動執(zhí)行sql語句,后面咱們在啟動項(xiàng)目的時候自動初始化。
創(chuàng)建我們自己的properties文件
# 實(shí)例化threadpool時,使用的線程類為simplethreadpoolorg.quartz.threadpool.class=org.quartz.simpl.simplethreadpool# threadcount和threadpriority將以setter的形式注入threadpool實(shí)例# 并發(fā)個數(shù)org.quartz.threadpool.threadcount=10# 優(yōu)先級org.quartz.threadpool.threadpriority=5org.quartz.threadpool.threadsinheritcontextclassloaderofinitializingthread=trueorg.quartz.jobstore.misfirethreshold=5000#持久化使用的類org.quartz.jobstore.class=org.quartz.impl.jdbcjobstore.jobstoretx#數(shù)據(jù)庫中表的前綴org.quartz.jobstore.tableprefix=qrtz_#數(shù)據(jù)源命名org.quartz.jobstore.datasource=qzds#qzds 數(shù)據(jù)源,我們使用hikaricp,默認(rèn)的是c3p0org.quartz.datasource.qzds.provider=hikaricporg.quartz.datasource.qzds.driver=com.mysql.cj.jdbc.driverorg.quartz.datasource.qzds.url=jdbc:mysql://localhost:3306/quartz?useunicode=true&characterencoding=utf-8&servertimezone=gmt+8org.quartz.datasource.qzds.user=rootorg.quartz.datasource.qzds.password=123456org.quartz.datasource.qzds.maxconnections=10既然我們沒有使用默認(rèn)的連接池,那么就探索一下,上源碼!在這個包下:org.quartz.utils,有一個poolingconnectionprovider,顧名思義,連接池提供者部分源碼
public interface poolingconnectionprovider extends connectionprovider { / the pooling provider. */ string pooling_provider = "provider"; / the c3p0 pooling provider. */ string pooling_provider_c3p0 = "c3p0"; / the hikari pooling provider. */ string pooling_provider_hikaricp = "hikaricp";}然后hikaricppoolingconnectionprovider這個類實(shí)現(xiàn)了poolingconnectionprovider,自行查看。我們可以在org.quartz.impl下的stdschedulerfactory中搜索c3p0找到
if(poolingprovider != null && poolingprovider.equals(poolingconnectionprovider.pooling_provider_hikaricp)) { cpclass = "org.quartz.utils.hikaricppoolingconnectionprovider"; } else { cpclass = "org.quartz.utils.c3p0poolingconnectionprovider"; }剩下的自己多看看吧,起始源碼研究起來沒有想象中那么難那么乏味(我也不喜歡看源碼),但是這個源碼看起來確實(shí)小有成就感。
回到正題頻道,配置application.yml
spring: datasource: driver-class-name: com.mysql.cj.jdbc.driver url: jdbc:mysql://localhost:3306/quartz?characterencoding=utf8&usessl=false&serve

域名服務(wù)是什么意思?
日本沒有用戶體驗(yàn)——從日本的生活品質(zhì)看設(shè)計(jì)
HTML頁面的基本代碼結(jié)構(gòu)是什么?
虛擬云主機(jī)和云服務(wù)器有什么區(qū)別
域名綁定不了-域名及賬戶問題
新用戶云服務(wù)器怎么安裝
深圳ecs云服務(wù)器到期取消備案
騰訊云服務(wù)器多少歲可以備案登記了