前面已經(jīng)講到了spring 3整合Quartz 2來(lái)實(shí)現(xiàn)時(shí)任務(wù),其實(shí)從spring 3開(kāi)始,它本身就已經(jīng)自帶了一套自主開(kāi)發(fā)的定時(shí)任務(wù)工具Spring-Task,可以將它看成是一個(gè)輕量級(jí)的Quartz,而且使用起來(lái)十分簡(jiǎn)單,除spring相關(guān)的包外不需要額外的包,支持注解和配置文件兩種形式。
第一種:配置文件方式
第一步:編寫(xiě)作業(yè)類(lèi),它是一個(gè)普通的Java類(lèi),不需要繼承和實(shí)現(xiàn)任何類(lèi)和接口:
- @Service
- public class TaskJob {
- public void job1() {
- System.out.println("任務(wù)成功運(yùn)行。。。");
- }
- }
第二步:在spring配置文件頭中添加spring-task的命名空間及描述:
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:task="http://www.springframework.org/schema/task"
- ...
- xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
第三步:spring配置文件中設(shè)置具體的任務(wù):
- <task:scheduled-tasks>
- <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>
- </task:scheduled-tasks>
- <context:component-scan base-package=" com.task " />
說(shuō)明:ref參數(shù)指定的即任務(wù)類(lèi),method指定的即需要運(yùn)行的方法,cron及cronExpression表達(dá)式,具體寫(xiě)法這里就不介紹了。
<context:component-scan base-package="com.task" />這個(gè)配置不消多說(shuō)了,spring掃描注解用的。
到這里配置就完成了,是不是很簡(jiǎn)單。
第二種:使用注解形式
從spring 2.5開(kāi)始,可以方便的使用注解來(lái)聲明bean,對(duì)于定時(shí)任務(wù),同樣提供了注解@Scheduled,我們?cè)撟⒔獾亩x:
- @Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface Scheduled
- {
- public abstract String cron();
- public abstract long fixedDelay();
- public abstract long fixedRate();
- }
可以看出該注解可以接收三個(gè)參數(shù),分別表示的意思是:
cron:指定cron表達(dá)式
fixedDelay:官方文檔解釋?zhuān)篈n interval-based trigger where the interval is measured from the completion time of the previous task. The time unit value is measured in milliseconds.即表示從上一個(gè)任務(wù)完成開(kāi)始到下一個(gè)任務(wù)開(kāi)始的間隔,單位是毫秒。
fixedRate:官方文檔解釋?zhuān)篈n interval-based trigger where the interval is measured from the start time of the previous task. The time unit value is measured in milliseconds.即從上一個(gè)任務(wù)開(kāi)始到下一個(gè)任務(wù)開(kāi)始的間隔,單位是毫秒。
下面我們使用注解來(lái)實(shí)現(xiàn)一下看看:
第一步:還是編寫(xiě)我們的任務(wù)類(lèi),和上面基本一樣,只不過(guò)方法上添加了@Scheduled注解。
- @Component("taskJob")
- public class TaskJob {
- @Scheduled(cron = "0 0 3 * * ?")
- public void run() {
- System.out.println("任務(wù)成功運(yùn)行。。。");
- }
- }
第二步:同樣需要在spring配置文件頭中添加spring-task的命名空間及描述,另外添加掃描spring-task的配置:- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:task="http://www.springframework.org/schema/task"
- ...
- xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
- ...
- <!-- 開(kāi)啟這個(gè)配置,spring才能識(shí)別@Scheduled注解 -->
- <task:annotation-driven/>
- ...
- </beans>
配置完畢,我們的任務(wù)已經(jīng)可以運(yùn)行了。當(dāng)然你也可以把cron參數(shù)換成另外的兩個(gè),自己嘗試一下吧。spring-task還有很多的參數(shù),這里就不一一解釋了,具體可以查看官方的文檔。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。