Spring任務調度之Spring-Task


一.前言

       上面兩篇介紹了在Spring 中使用Timer與Quartz,本篇將介紹Spring3.0以后自主開發的定時任務工具,spring task,可以將它比作一個輕量級的Quartz,而且使用起來很簡單,除spring相關的包外不需要額外的包,而且支持注解和配置文件兩種形式,下面將分別介紹這兩種方式。


二、第一種:配置文件方式

 第一步:編寫作業類 

             即普通的pojo,如下:

import org.springframework.stereotype.Service;  
@Service  
public class TaskJob {  
      
    public void job1() {  
        System.out.println(“任務進行中。。。”);  
    }  
}  

第二步:spring配置

<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">


      <task:scheduled-tasks>
                  <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>
      </task:scheduled-tasks>
     <context:component-scan base-package=" com.gy.mytask " />


</beans>

說明:ref參數指定的即任務類,method指定的即需要運行的方法,cron及cronExpression表達式。<context:component-scan base-package="com.gy.mytask" />這個配置不消多說了,spring掃描注解用的。


第二種:使用注解形式

也許我們不想每寫一個任務類還要在xml文件中配置下,我們可以使用注解@Scheduled,我們看看源文件中該注解的定義:

@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();  
}  

可以看出該注解有三個方法或者叫參數,分別表示的意思是:

   cron:指定cron表達式。

   fixedDelay:官方文檔解釋:An interval-based trigger where the interval is measured from the completion time of the previous task. The time unit value is measured in milliseconds.即表示從                       上一個任務完成開始到下一個任務開始的間隔,單位是毫秒。

   fixedRate:官方文檔解釋:An interval-based trigger where the interval is measured from the start time of the previous task. The time unit value is measured in milliseconds.即從上一個任務                        開始到下一個任務開始的間隔,單位是毫秒。

第一步:編寫pojo

import org.springframework.stereotype.Component;  
  
@Component(“taskJob”)  
public class TaskJob {  
    @Scheduled(cron = "0 0 3 * * ?")  
    public void job1() {  
        System.out.println(“任務進行中。。。”);  
    }  
}  

第二步:添加task相關的配置:

<?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:aop="http://www.springframework.org/schema/aop"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:task="http://www.springframework.org/schema/task"  
    xsi:schemaLocation="  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
        http://www.springframework.org/schema/context   
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"  
    default-lazy-init="false">  
  
  
    <context:annotation-config />  
    <!—spring掃描注解的配置   —>  
    <context:component-scan base-package="com.gy.mytask" />  
      
<!—開啟這個配置,spring才能識別@Scheduled注解   —>  
    <task:annotation-driven scheduler="qbScheduler" mode="proxy"/>  
    <task:scheduler id="qbScheduler" pool-size="10"/>  

說明:理論上只需要加上<task:annotation-driven />這句配置就可以了,這些參數都不是必須的。

配置完畢,spring task還有很多參數,具體參考xsd文檔 http://www.springframework.org/schema/task/spring-task-3.0.xsd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM