欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring定時(shí)任務(wù)實(shí)現(xiàn)與配置(一)

 更新時(shí)間:2017年06月21日 11:02:41   作者:幻xiang  
這篇文章主要為大家詳細(xì)介紹了Spring定時(shí)任務(wù)的實(shí)現(xiàn)與配置第一篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

朋友的項(xiàng)目中有點(diǎ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),很有趣很有意思??梢宰龅阶杂刹灏喂δ苣K的效果。工程項(xiàng)目是基于MAVEN包依賴管理的,所以把這次需要的依賴包引用列出來:

<!-- 定時(shí)器依賴 開始 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>

 

<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<!-- 定時(shí)器依賴 結(jié)束 -->

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

 在MAVEN配置完所需要添加的包之后(其他的包,這里暫時(shí)不擴(kuò)展開說了,本文只討論在完整Spring工程項(xiàng)目下的配置),我們就可以開始動(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。這樣就可以通過同一個(gè)掃描的配置在啟動(dòng)的時(shí)候去讀取了。具體的代碼如下:

 <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-*.xml</param-value>
  </context-param>

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

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

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

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

好了邏輯流程解說完畢,上代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
  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"> 
 
    <!-- 啟動(dòng)觸發(fā)器的配置開始 --> 
  <bean name="startQuertz" lazy-init="false" autowire="no" 
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="triggers"> 
      <list> 
        <ref bean="myJobTrigger" /> 
      </list> 
    </property> 
  </bean> 
  <!-- 啟動(dòng)觸發(fā)器的配置結(jié)束 --> 
 
  <!-- 調(diào)度的配置開始 --> 
  <!-- 
    quartz-1.8以前的配置  
  <bean id="myJobTrigger" 
    class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail"> 
      <ref bean="myJobDetail" /> 
    </property> 
    <property name="cronExpression"> 
      <value>0/1 * * * * ?</value> 
    </property> 
  </bean> 
  --> 
  <!-- quartz-2.x的配置 --> 
  <bean id="myJobTrigger" 
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
    <property name="jobDetail"> 
      <ref bean="myJobDetail" /> 
    </property> 
    <property name="cronExpression"> 
    
    <value>0/10 * * * * ?</value>
     <!--  <value>1 52 * * * ?</value> --> 
    </property> 
  </bean> 
  <!-- 調(diào)度的配置結(jié)束 --> 
 
  <!-- job的配置開始 --> 
  <bean id="myJobDetail" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="targetObject"> 
      <ref bean="myJob" /> 
    </property> 
    <property name="targetMethod"> 
      <value>work</value> 
    </property> 
  </bean> 
  <!-- job的配置結(jié)束 --> 
 
  <!-- 工作的bean --> 
  <bean id="myJob" class="com.tec.kevin.quartz.jobTest" /> 
 
</beans>

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • 詳解JDK9特性之JPMS模塊化

    詳解JDK9特性之JPMS模塊化

    JDK9引入了一個(gè)特性叫做JPMS(Java Platform Module System),也可以叫做Project Jigsaw。模塊化的本質(zhì)就是將一個(gè)大型的項(xiàng)目拆分成為一個(gè)一個(gè)的模塊,每個(gè)模塊都是獨(dú)立的單元,并且不同的模塊之間可以互相引用和調(diào)用。本文將詳細(xì)介紹JDK9特性之JPMS模塊化。
    2021-06-06
  • Maven配置文件pom.xml詳解

    Maven配置文件pom.xml詳解

    什么是POM?這篇文章主要介紹了Maven的配置文件pom.xml,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • SpringBoot2.x設(shè)置Session失效時(shí)間及失效跳轉(zhuǎn)方式

    SpringBoot2.x設(shè)置Session失效時(shí)間及失效跳轉(zhuǎn)方式

    這篇文章主要介紹了SpringBoot2.x設(shè)置Session失效時(shí)間及失效跳轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • spring boot 集成shiro的配置方法

    spring boot 集成shiro的配置方法

    要在spring boot上集成其他框架,首先要會(huì)spring javaconfig方法,利用此方法同樣可以配置其他模塊。這篇文章主要介紹了spring boot 集成shiro的配置方法,需要的朋友可以參考下
    2018-01-01
  • Java中HashMap與String字符串互轉(zhuǎn)的問題解決

    Java中HashMap與String字符串互轉(zhuǎn)的問題解決

    本文介紹了Java中HashMap與String字符串互轉(zhuǎn)的問題解決,當(dāng)我們有需求將HashMap轉(zhuǎn)為Json格式的String時(shí),需要使用FastJson/Gson將HashMap轉(zhuǎn)為String,感興趣的可以了解一下
    2022-03-03
  • springboot集成opencv實(shí)現(xiàn)人臉識(shí)別功能的詳細(xì)步驟

    springboot集成opencv實(shí)現(xiàn)人臉識(shí)別功能的詳細(xì)步驟

    大家都知道OpenCV是一個(gè)基于BSD許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上今天通過本文給大家分享springboot集成opencv實(shí)現(xiàn)人臉識(shí)別,感興趣的朋友一起看看吧
    2021-06-06
  • springBoot 過濾器去除請(qǐng)求參數(shù)前后空格實(shí)例詳解

    springBoot 過濾器去除請(qǐng)求參數(shù)前后空格實(shí)例詳解

    這篇文章主要為大家介紹了springBoot 過濾器去除請(qǐng)求參數(shù)前后空格實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • java算法入門之有效的括號(hào)刪除有序數(shù)組中的重復(fù)項(xiàng)實(shí)現(xiàn)strStr

    java算法入門之有效的括號(hào)刪除有序數(shù)組中的重復(fù)項(xiàng)實(shí)現(xiàn)strStr

    大家好,我是哪吒,一個(gè)熱愛編碼的Java工程師,本著"欲速則不達(dá),欲達(dá)則欲速"的學(xué)習(xí)態(tài)度,在程序猿這條不歸路上不斷成長(zhǎng),所謂成長(zhǎng),不過是用時(shí)間慢慢擦亮你的眼睛,少時(shí)看重的,年長(zhǎng)后卻視若鴻毛,少時(shí)看輕的,年長(zhǎng)后卻視若泰山,成長(zhǎng)之路,亦是漸漸放下執(zhí)念,內(nèi)心歸于平靜的旅程
    2021-08-08
  • JavaWeb實(shí)現(xiàn)簡(jiǎn)單上傳文件功能

    JavaWeb實(shí)現(xiàn)簡(jiǎn)單上傳文件功能

    這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)簡(jiǎn)單上傳文件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • SpringMvc直接接收json數(shù)據(jù)自動(dòng)轉(zhuǎn)化為Map的實(shí)例

    SpringMvc直接接收json數(shù)據(jù)自動(dòng)轉(zhuǎn)化為Map的實(shí)例

    今天小編就為大家分享一篇SpringMvc直接接收json數(shù)據(jù)自動(dòng)轉(zhuǎn)化為Map的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評(píng)論