根據各位網友的指導,特別是 lk_well 朋友的分析:
從Spring3.2.4才開始支持quart-2.x
spring3.0還不支持quartz2.x. 樓主的例子中引用了myeclispe自帶的Spring 3.0 Misc Libray,這個library中包含com.springsource.org.quartz-1.6.x.jar 其實樓主的例子還是用的quartz1.x.jar才運行成功的。
lk_well 的博客中也給出了正確的代碼:博文地址(Spring-3.2.4 + Quartz-2.2.0集成實例)
請大家參照他的文章來做測試,謝謝。
環境:Myeclipse10+JDK1.6+Spring3.0(Myeclipse自帶的) +Quartz2.1.6+Tomcat7
因為項目中要用到任務調度,如果使用Spring自帶的定時器的話,配置調度規則時不夠靈活。頭決定使用Quartz,發了倆鏈接供我參考,從那倆鏈接對Quartz有了初步的認識,但是那倆鏈接都是針對1.6版本的,1.8版本后有了大的改變,包括初始化方法都發生了改變。參照了網上的文章並閱讀了官方的文檔調試了將近兩天依然沒法調通,官方的文檔並不太相近,示例也並不豐富。
后來朋友給我遠程調試了下,問題解決了。
解決過程中遇到過以下問題:
1.web.xml中關於Spring配置文件配置的順序s問題,Spring的配置文件位置制定必須放在其他Spring其他配置之前。
2.缺少 commons-collections-3.2.jar 因為會用到org/apache/commons/collections下面的某個類,而我的項目中沒有。這個要從網上下。
3.applicationContext.xml中關於Job的配置,網上有些文章中,實際工作類是繼承於Spring的某個類,這個類實現了Quartz的Job接口,但是按照那個寫法,和對應的配置文件,無法工作,后來用了朋友給的方法,工作類就是普通的java類,在配置文件中制定具體的方法,配置文件稍后貼上。
步驟:
1:在Myeclipse中創建Web項目,創建完畢后在項目上點右鍵 ,Myeclipse、Add Spring Capabilities,選擇要添加的包,我把帶Spring字樣的都選上了,其實用不到這么多。
2:復制下載Quartz-2.16解壓后根目錄中quartz-all-2.1.6.jar和lib目錄中的所有jar包,在項目上右鍵,粘貼,相同方法再添加 commons-collections-3.2.jar 到項目中,再在項目上右鍵、properties, Java Build Path,Add JARs,選擇剛添加的那些jar包,將這些jar包引用到項目中。(你也可以不將這些jar包復制到項目中,而直接在java build path界面中添加外部的,但是為了便於項目的復制,我一般都這么做)
3.編寫工作的類。代碼很簡單:
* @author sixi
* @version 0.1
* Company:Tsinghua
* Date:2012-09-15
* Description:這是一個執行調度的具體類,在Spring配置文件中指定調用此類的work方法
* */
package com.tsinghua.test;
import java.util.Date;
/*
* 使用spring+Quartz執行任務調度的具體類
* */
public class MyJob {
/*
* Description:具體工作的方法,此方法只是向控制台輸出當前時間,
* 輸入的日志在:%tomcatRoot%\logs\tomcat7-stdout.yyyy-MM-dd.log中,
* 其中,yyyy-MM-dd為部署的日期,經試驗發現默認情況下並不是每天都生成一個stdout的日志文件
* @return 返回void
* */
public void work()
{
System.out.println("當前時間:"+ new Date().toString());
}
} // End of MyJob
4.配置web.xml,具體配置文件如下:
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>SpringQuartzDemo</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 說明:Spring的配置文件設置必須在啟動Spring Bean工廠監聽之前,否則會報錯, .Net配置文件好像沒有先後順序 -->
<!-- Spring配置文件開始 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<!-- Spring配置文件結束 -->
<!-- 啟動 Spring Bean 工廠監聽開始 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 啟動 Spring Bean 工廠監聽結束 -->
</web-app>
5.配置applicationContext.xml
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:p ="http://www.springframework.org/schema/p"
xsi:schemaLocation ="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >
<!-- 工作的bean -->
< bean id ="myJob" class ="com.tsinghua.test.MyJob" />
<!-- job的配置開始 -->
< bean id ="myJobDetail"
class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
< property name ="targetObject" >
< ref bean ="myJob" />
</ property >
< property name ="targetMethod" >
< value >work </ value >
</ property >
</ bean >
<!-- job的配置結束 -->
<!-- 調度的配置開始 -->
< bean id ="crontestJobTrigger" class ="org.springframework.scheduling.quartz.CronTriggerBean" >
< property name ="jobDetail" >
< ref bean ="myJobDetail" />
</ property >
< property name ="cronExpression" >
< value >0/1 * * * * ? </ value >
</ property >
</ bean >
<!-- 調度的配置結束 -->
<!-- 啟動觸發器的配置開始 -->
< bean name ="startQuertz" lazy-init ="false" autowire ="no"
class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
< property name ="triggers" >
< list >
< ref bean ="crontestJobTrigger" />
</ list >
</ property >
</ bean >
<!-- 啟動觸發器的配置結束 -->
</ beans >
6.在Tomcat中調試,即可在Console窗口看到輸出
項目代碼:
PS:今天博客園插入代碼片段的時候怎么老是出問題,不是代碼的最上面一行就是代碼的最下面一行會跑到代碼段外面去了。