這幾天因爲工作的需要,用到了spring的定時任務的功能,網上查資料,並且實際運用了一下,覺得spring還是很智能化的,只需要配置一下配置文件就可以了,下面的這篇文章我覺得還是很好的,摘錄下來,供以後參考用 package util;
import org.apache.log4j.*; public class TaskJob { public static Logger log = Logger .getLogger(TaskJob.class); public void SayHello() { // TODO Auto-generated method stub try { log.info("處理任務開始>........"); // 業務邏輯代碼調用 System.out.println("時間[" + new java.util.Date().toLocaleString() + "]----->大家好啊!"); log.info("處理任務結束!"); } catch (Exception e) { log.error("處理任務出現異常", e); } } } 2.接下來的在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 name="taskJob" class="util.TaskJob" /> <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="taskJob" /> </property> <property name="targetMethod"> <value>SayHello</value> </property> </bean> <!-- 配置觸發器 --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <!-- 這裏不可以直接在屬性jobDetail中引用taskJob,因爲他要求的是一個jobDetail類型的對象,所以我們得通過MethodInvokingJobDetailFactoryBean來轉一下 --> <property name="jobDetail"> <ref bean="methodInvokingJobDetail" /> </property> <!-- 每天的8點到21點每隔1分鐘觸發,具體說明見附錄 --> <property name="cronExpression"> <value>0 * 08-21 * * ?</value> </property> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 添加觸發器 --> <property name="triggers"> <list> <ref local="cronTrigger" /> </list> </property> </bean> </beans> 3.測試執行的類,只要把spring的配置文件加載了就可以看到定時任務運行了。 package util; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestApp { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("加載spring配置文件...."); ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); System.out.println("加載配置文件完畢!"); // ApplicationContext context2 = new ClassPathXmlApplicationContext("test/timerTask/quartzTimer.xml"); } } 如果要在web項目中運行的話還要在web.xml 中加入如下代碼: <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
3.測試執行的類,只要把spring的配置文件加載了就可以看到定時任務運行了。
package util; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestApp { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("加載spring配置文件...."); ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); System.out.println("加載配置文件完畢!"); // ApplicationContext context2 = new ClassPathXmlApplicationContext("test/timerTask/quartzTimer.xml"); } }
如果要在web項目中運行的話還要在web.xml 中加入如下代碼:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
以下是網上摘抄的一些說明:
字段允許值允許的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小時 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可選)留空, 1970-2099 , - * /
表達式意義
"0 0 12 * * ?" 每天中午12點觸發
"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點到下午2:59期間的每1分鐘觸發
"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發
"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和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年至2005年的每月的最後一個星期五上午10:15觸發
"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發