1:需要的jar包:
Spring的包自然不必說了;
quartz.jar;
jta.jar;
commons-collections.jar;
這裏Spring用到了Quartz, 它是一個開源的作業調度框架,它完全由Java寫成,並設計用於J2SE和J2EE應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來爲執行一個作業而創建簡單的或複雜的調度。
2:創建任務類(就是一個普通的JAVA BEAN):例如:
public class TestTimerTask {
public void execute(){
System.out.println("開始後臺用戶資料預處理......");
}
}
通常定時任務都是後臺處理業務,這個類裏的方法就是我們想讓它定時執行的;
3:spring裏的配置如下示例代碼:
<bean id="TimerTask"
class="com.spr.spring.bean.TestTimerTask"/><!—這裏就是上面定義的BEAN-->
<bean id="scheduledInfo"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="TimerTask"/>
</property>
<property name="targetMethod"><!—這裏定義要調用的方法-->
<value>execute</value>
</property>
</bean>
<bean id="cronInfoTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="scheduledInfo"/>
</property>
<property name="cronExpression">
<value>0 * * * * </value>
<!—以上的說明見附錄 這裏是每分鐘的0秒時執行操作-->
</property>
</bean>
<bean autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronInfoTrigger"/>
</list>
</property>
</bean>
需要說明的是最後一個BEAN是管理這些觸發器的總設置,他管理我們的觸發器列表。一定要把autowire設置爲no。“cronInfoTrigger”這是一個觸發器的bean的設置,裏面的cronExpression就是定義什麼時候執行觸發的,語法比較不好理解。
4:一般的SPRING項目都要在web.xml裏設置如下內容:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<!-- servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
*******************************************************************************
一個cron表達式有至少6個(也可能是7個)由空格分隔的時間元素。從左至右,這些元素的定義如下:
1.秒(0–59)
2.分鐘(0–59)
3.小時(0–23)
4.月份中的日期(1–31)
5.月份(1–12或JAN–DEC)
6.星期中的日期(1–7或SUN–SAT)
7.年份(1970–2099)
每一個元素都可以顯式地規定一個值(如6),一個區間(如9-12),一個列表(如9,11,13)或一個通配符(如*)。“月份中的日期”和“星期中的日期”這兩個元素是互斥的,因此應該通過設置一個問號(?)來表明你不想設置的那個字段。表7.1中顯示了一些cron表達式的例子和它們的意義:
表7.1 一些cron表達式的例子
表 達 式
意 義
0 0 10,14,16 * *
每天上午10點,下午2點和下午4點
0 0,15,30,45 * 1-10 *
每月前10天每隔15分鐘
30 0 0 1 1 2012
在2012年1月1日午夜過30秒時
0 0 8-5 * MON-FRI
每個工作日的工作時間
對於cronReportTrigger,我們設置cronExpression爲0 0 6 * * 可以把它讀作“在任何月份任何日期(不管是星期幾)的6時0分0秒執行觸發器。”換句話說,這個觸發器會在每天早晨6:00執行。