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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

java 定时 spring_Spring定时任务实现与配置(一)

發(fā)布時(shí)間:2023/12/4 javascript 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 定时 spring_Spring定时任务实现与配置(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

朋友的項(xiàng)目中有點(diǎn)問(wèn)題。他那邊是Spring架構(gòu)的,有一個(gè)比較簡(jiǎn)單的需要定時(shí)的任務(wù)執(zhí)行。在了解了他的需求之后,于是提出了比較簡(jiǎn)單的Spring+quartz的實(shí)現(xiàn)方式。

注意本文只是討論,在已搭建完畢的Spring工程下,完成最簡(jiǎn)單的定時(shí)任務(wù)。

第一步,要知道Spring這個(gè)架構(gòu),很有趣很有意思。可以做到自由插拔功能模塊的效果。工程項(xiàng)目是基于MAVEN包依賴管理的,所以把這次需要的依賴包引用列出來(lái):

org.springframework

spring-context-support

4.0.2.RELEASE

org.quartz-scheduler

quartz

2.2.1

當(dāng)然,這是要跟對(duì)應(yīng)的Spring的版本是要匹配的。我們這里的工程是4.0.2。前一個(gè)包spring-context-support,主要的作用是作為Spring與quartz的溝通管理的部件,如果注釋掉就會(huì)報(bào)這樣的錯(cuò)誤

在MAVEN配置完所需要添加的包之后(其他的包,這里暫時(shí)不擴(kuò)展開(kāi)說(shuō)了,本文只討論在完整Spring工程項(xiàng)目下的配置),我們就可以開(kāi)始動(dòng)手給這個(gè)項(xiàng)目添加,定時(shí)任務(wù)的功能模塊了。

第二步,從web的項(xiàng)目的起源,web.xml 中改動(dòng)做起。由于原本的項(xiàng)目Spring的配置文件是Spring-mvc.xml,我這里就把定時(shí)任務(wù)的配置文件改成了spring-time.xml。這樣就可以通過(guò)同一個(gè)掃描的配置在啟動(dòng)的時(shí)候去讀取了。具體的代碼如下:

contextConfigLocation

classpath:spring-*.xml

然后給大家看一下我的工程結(jié)構(gòu):

通過(guò)這樣的配置,項(xiàng)目就會(huì)知道怎么去調(diào)用了。實(shí)現(xiàn)了這一步接下來(lái)我們就可以繼續(xù)往下走了;

第三步,就是要完成spring-timer.xml這個(gè)定時(shí)任務(wù)的核心配置了。在這個(gè)文件配置中,我們主要是完成三件事情:

1.配置啟動(dòng)的設(shè)置,關(guān)于懶加載(簡(jiǎn)單說(shuō)一下,比如把某個(gè)變量初始化為null,也是一種懶加載,即在服務(wù)啟動(dòng)之后,只有在實(shí)際被調(diào)用的時(shí)候才會(huì)實(shí)例化,否則是不會(huì)在內(nèi)存中存在的,只是邏輯上的。可以省空間,但是也可能會(huì)導(dǎo)致,問(wèn)題延遲很久才會(huì)被發(fā)現(xiàn),此處不再詳細(xì)解說(shuō)),以及觸發(fā)器的配置;

2.quartz-2.x的配置,包含定時(shí)任務(wù)觸發(fā)之后要調(diào)用的job的名字,以及corn表達(dá)式(即定時(shí)表達(dá)式,控制程序在何時(shí)重復(fù)執(zhí)行的原因,本次在會(huì)在后續(xù)補(bǔ)充關(guān)于cron表達(dá)式的內(nèi)容);

3.配置job的內(nèi)容和job對(duì)應(yīng)的具體的類(lèi)。

好了邏輯流程解說(shuō)完畢,上代碼:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

0/10 * * * * ?

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

work

完成這里的配置文件配置之后,就可以開(kāi)始下一步,具體的業(yè)務(wù)邏輯實(shí)現(xiàn)了;

第四步,具體業(yè)務(wù)邏輯實(shí)現(xiàn)。

這里要注意的是下圖中的兩個(gè)點(diǎn)

上圖是具體的業(yè)務(wù)實(shí)現(xiàn)的類(lèi),里面的名字和下圖定時(shí)任務(wù)配置的要相同。

完成上述之后,我們可以啟動(dòng)項(xiàng)目看看實(shí)際效果了。

這里可以看到,定時(shí)任務(wù)按照我們之前在配置中的 0/10 * * * * ? 每10秒執(zhí)行一次 來(lái)運(yùn)行了。

要注意的是,在實(shí)現(xiàn)這個(gè)方法的過(guò)程中,我遇到了重復(fù)執(zhí)行的情況。就是同一個(gè)時(shí)間,執(zhí)行了兩次。后來(lái)找到的原因是在配置web.xml的時(shí)候,重復(fù)配置了定時(shí)任務(wù),這樣導(dǎo)致執(zhí)行了多次。要是有遇到這個(gè)情況的,可以參考我的解決方法。

接來(lái)下會(huì)有兩篇文章,一篇是寫(xiě)定時(shí)任務(wù)的更簡(jiǎn)單的實(shí)現(xiàn)方法,另外一篇講解cron 表達(dá)式。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

總結(jié)

以上是生活随笔為你收集整理的java 定时 spring_Spring定时任务实现与配置(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。