最近有个项目需要做一些定时的任务,就像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
分享爱的空间 阅读(2154)
评论(7) 编辑 收藏