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

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

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