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

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

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