最近有個項目需要做一些定時的任務(wù),就像linux的crontab一樣的功能。就在網(wǎng)站找了一些資料,發(fā)現(xiàn)quartz不錯,就一個quartz.jar包外加一個common-logging.jar
和jta.jar,挺輕量級的小東東。
于是在網(wǎng)上找了一些資料,照葫蘆畫瓢,在本機上把環(huán)境是搭建起來了。定時任務(wù)也挺順利地跑起來了。心里挺美!!!

到了上線的日子,我當(dāng)然是輕車熟路的在運營環(huán)境把服務(wù)給搭上。結(jié)果一跑服務(wù),問題出來了。發(fā)現(xiàn)每到定時任務(wù)到點啟動時,就會同時起兩個任務(wù)。
網(wǎng)上一搜,發(fā)現(xiàn)不少難兄難弟,但他們都是spring,而我就是普通的servlet,好像不是一回事。
于是到處找資料、到處查文檔,最后我把quartz的源碼拿了過來,加上調(diào)試語句(俺只會system.out調(diào)試,嘿嘿!!

)。然后重新打包,加入部署到tomcat環(huán)境中
發(fā)現(xiàn),我的quartz的Scheduler起了兩次,也就是說,web容器中有兩個triger服務(wù)起來了。所以任務(wù)被執(zhí)行時,當(dāng)然也就出現(xiàn)兩次。
原因是找到了,但為什么servlet的init方法會被調(diào)用兩次,這是不可能的啊。
最后又到網(wǎng)上一通亂搜,在網(wǎng)友的啟發(fā)下,我發(fā)現(xiàn)原來是我的server.xml文件配置有問題。
原因在于,我有個ww.fff.com.cn的域名,我同時也希望fff.com.cn的域名也指向同一個地方,于是我在server.xml中配了兩個host,他們的appBase指向同一個地方。
這就導(dǎo)致tomcat服務(wù)啟動時,會兩次調(diào)用web.xml,做兩次初始化。也就導(dǎo)致servlet的init的方法調(diào)用兩次,而在web容器中產(chǎn)生兩個Scheduler。
哎,這么個錯誤,差點讓我放棄使用quartz。
看來,開發(fā)環(huán)境和真實環(huán)境還是有很大區(qū)別,要用好一個開源項目,如果缺少其他技術(shù)基礎(chǔ),也是寸步難行,web系統(tǒng)是一個大的生態(tài)系統(tǒng),往往加入一些元
素,也會對其他元素造成影響,而新加入的元素也不見得就能和已有元素和諧生存。使用新技術(shù)還是有很大的風(fēng)險的。但新技術(shù)的引入會讓你的系統(tǒng)更加飽滿、
豐富、完善。
問題搞定,終于可以輕松回家了。
posted on 2009-05-12 20:37
分享愛的空間 閱讀(2160)
評論(7) 編輯 收藏