前言:
我們知道Quartz是一個功能全面的,開源的作業調度服務,它可以集成、使用於任何的Java EE或Java SE程序 。
具體說明參照:http://quartz-scheduler.org/
這裏我們說一下它在Spring框架中的使用。
依賴的jar包:org.springframework.context.support-3.1.1.RELEASE.jar
一、寫一個被用於作業調度的類
package com.dt5000.quartz;
public class QuartzJob
{
public void doJob(){
System.out.println(new Date()+"執行Quartz的任務");
}
}
二、編寫spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 要調用的工作類 -->
<bean id="quartzJob" class="com.dt5000.quartz.QuartzJob"></bean>
<!-- 定義調用對象和調用對象的方法 -->
<bean id="jobtask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 調用的類 -->
<property name="targetObject">
<ref bean="quartzJob" />
</property>
<!-- 調用類中的方法 -->
<property name="targetMethod">
<value>doJob</value>
</property>
</bean>
<!-- 定義觸發時間 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask" />
</property>
<!-- cron表達式 每天凌晨兩點執行任務-->
<property name="cronExpression">
<value>0 0 2 * * ?</value>
</property>
</bean>
<!-- 總管理類 如果將lazy-init='false'那麼容器啓動就會執行調度程序 -->
<bean id="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
</beans>
附:cronExpression表達式
一個cron表達式有至少6個(也可能7個)有空格分隔的時間元素。
按順序依次爲
秒(0~59)
分鐘(0~59)
小時(0~23)
天(月)(0~31,但是你需要考慮你月的天數)
月(0~11)
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
7.年份(1970-2099)
示例:
0 0 12 * * ?---------------在每天中午12:00觸發
0 15 10 ? * *---------------每天上午10:15 觸發
0 15 10 * * ?---------------每天上午10:15 觸發
0 15 10 * * ? *---------------每天上午10:15 觸發
0 15 10 * * ? 2005---------------在2005年中的每天上午10:15 觸發
0 * 14 * * ?---------------每天在下午2:00至2:59之間每分鐘觸發一次
0 0/5 14 * * ?---------------每天在下午2:00至2:59之間每5分鐘觸發一次
0 0/5 14,18 * * ?---------------每天在下午2:00至2:59和6:00至6:59之間的每5分鐘觸發一次
0 0-5 14 * * ?---------------每天在下午2:00至2:05之間每分鐘觸發一次
0 10,44 14 ? 3 WED---------------每三月份的星期三在下午2:00和2:44時觸發
0 15 10 ? * MON-FRI---------------從星期一至星期五的每天上午10:15觸發
0 15 10 15 * ?---------------在每個月的每15天的上午10:15觸發
0 15 10 L * ?---------------在每個月的最後一天的上午10:15觸發
0 15 10 ? * 6L---------------在每個月的最後一個星期五的上午10:15觸發
0 15 10 ? * 6L 2002-2005---------------在2002, 2003, 2004 and 2005年的每個月的最後一個星期五的上午10:15觸發
0 15 10 ? * 6#3---------------在每個月的第三個星期五的上午10:15觸發
0 0 12 1/5 * ?---------------從每月的第一天起每過5天的中午12:00時觸發
0 11 11 11 11 ?---------------在每個11月11日的上午11:11時觸發.