今天就跟大家聊聊有關如何配置Spring定時任務,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
第一步,要知道Spring這個架構,很有趣很有意思??梢宰龅阶杂刹灏喂δ苣K的效果。工程項目是基于MAVEN包依賴管理的,所以把這次需要的依賴包引用列出來:
<!-- 定時器依賴 開始 --> <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> <!-- 定時器依賴 結束 -->
當然,這是要跟對應的Spring的版本是要匹配的。我們這里的工程是4.0.2。前一個包spring-context-support,主要的作用是作為Spring與quartz的溝通管理的部件,如果注釋掉就會報這樣的錯誤

在MAVEN配置完所需要添加的包之后(其他的包,這里暫時不擴展開說了,本文只討論在完整Spring工程項目下的配置),我們就可以開始動手給這個項目添加,定時任務的功能模塊了。
第二步,從web的項目的起源,web.xml 中改動做起。由于原本的項目Spring的配置文件是Spring-mvc.xml,我這里就把定時任務的配置文件改成了spring-time.xml。這樣就可以通過同一個掃描的配置在啟動的時候去讀取了。具體的代碼如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</context-param>然后給大家看一下我的工程結構:

通過這樣的配置,項目就會知道怎么去調用了。實現了這一步接下來我們就可以繼續往下走了;
第三步,就是要完成spring-timer.xml這個定時任務的核心配置了。在這個文件配置中,我們主要是完成三件事情:
1.配置啟動的設置,關于懶加載(簡單說一下,比如把某個變量初始化為null,也是一種懶加載,即在服務啟動之后,只有在實際被調用的時候才會實例化,否則是不會在內存中存在的,只是邏輯上的??梢允】臻g,但是也可能會導致,問題延遲很久才會被發現,此處不再詳細解說),以及觸發器的配置;
2.quartz-2.x的配置,包含定時任務觸發之后要調用的job的名字,以及corn表達式(即定時表達式,控制程序在何時重復執行的原因,本次在會在后續補充關于cron表達式的內容);
3.配置job的內容和job對應的具體的類。
好了邏輯流程解說完畢,上代碼:
<?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">
<!-- 啟動觸發器的配置開始 -->
<bean name="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myJobTrigger" />
</list>
</property>
</bean>
<!-- 啟動觸發器的配置結束 -->
<!-- 調度的配置開始 -->
<!--
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>
<!-- 調度的配置結束 -->
<!-- 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的配置結束 -->
<!-- 工作的bean -->
<bean id="myJob" class="com.tec.kevin.quartz.jobTest" />
</beans>完成這里的配置文件配置之后,就可以開始下一步,具體的業務邏輯實現了;
第四步,具體業務邏輯實現。
這里要注意的是下圖中的兩個點

上圖是具體的業務實現的類,里面的名字和下圖定時任務配置的要相同。
完成上述之后,我們可以啟動項目看看實際效果了。

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

看完上述內容,你們對如何配置Spring定時任務有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。