Spring定時器在SSH框架中的應用之---Java Timer調度器


在系統應用中,我們有很多的工作是需要系統自己來做的。在Spring中針對此需求有兩種流行配置,一是Java的Timer類;二是Quartz調度器。

下面來介紹下第一種配置:Java的Timer類;

首先定義一個定時器任務,繼承java.util.TimerTask類實現run方法:

import java.util.List;
import java.util.TimerTask;

import com.huilian.synchro.module.SynchroColumn;
import com.huilian.synchro.service.ISynchroColumnService;
import com.huilian.wcm.webservice.IContentWebserviceClient;
import com.huilian.wcm.webservice.IContentWebservicePortType;

public class SynchroDataTimerTask extends TimerTask{
    
    private IContentWebserviceClient client = null;
    IContentWebservicePortType service = null;
    
    public SynchroDataTimerTask(){
        client = new IContentWebserviceClient();
        service = client.getIContentWebserviceHttpPort();
    }
    private ISynchroColumnService synchroColumnService;
    public ISynchroColumnService getSynchroColumnService() {
        return synchroColumnService;
    }
    public void setSynchroColumnService(ISynchroColumnService synchroColumnService) {
        this.synchroColumnService = synchroColumnService;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stubList<SynchroColumn> synchroColumns = this.synchroColumnService.findAllColumns();
       for(int i=0;i<synchroColumns.size();i++){
            SynchroColumn synchroColumn = synchroColumns.get(i);
            System.out.println(synchroColumn.getNwcolumnid());
       }
    }
    
}
Run()方法定義了當任務運行時該做什么。synchroColumnService通過依賴注入的方式提供給SynchroDataTimerTask。

其次,在Spring配置文件中聲明 SynchroDataTimerTask: 

<!-- 聲明定時器任務 --> 
    <bean id="synchroDataTimerTask" class="com.huilian.synchro.task.SynchroDataTimerTask">
        <property name="synchroColumnService">
            <ref bean="synchroColumnService"/>
        </property>
    </bean>
    
    <!-- 調度定時器任務 --> 
    <bean id="scheduledDayDataTimerJob" class="org.springframework.scheduling.timer.ScheduledTimerTask">
        <property name="timerTask">
            <ref bean="synchroDataTimerTask" />
        </property>
        <property name="delay">
            <value>10000</value>
        </property>
        <property name="period">
            <value>3600000</value>
        </property>
    </bean> 
    
    <!-- 啟動定時器 --> 
    <bean class="org.springframework.scheduling.timer.TimerFactoryBean"> 
        <property name="scheduledTimerTasks"> 
            <list> 
                <ref bean="scheduledDayDataTimerJob"/> 
            </list> 
        </property> 
    </bean> 

以上配置中屬性timerTask告訴ScheduledTimerTask運行哪個TimerTask。再次,該屬性裝配了指向 scheduledDayDataTimerJob的一個引用,它就是synchroDataTimerTask。屬性period告訴 ScheduledTimerTask以怎樣的頻度調用TimerTask的run()方法,該屬性以毫秒作為單位。
屬性delay允許你指定當任務第一次運行之前應該等待多久。在此指定DayDataTimerTask的第一次運行相 對於應用程序的啟動時間延遲10秒鍾。

Spring的TimerFactoryBean負責啟動定時任務。屬性scheduledTimerTasks要求一個需要啟動的定時器任務的列表。在此只包含一個指向scheduledDayDataTimerJob的引用。 
   
Java Timer只能指定任務執行的頻度,但無法精確指定它何時運行,這是它的一個局限性。要想精確指定任務的啟動時間,就需要使用Quartz[kwɔ:ts]調度器。 

 


免責聲明!

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



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