项目环境
项目是比较老的spring web应用
服务器环境为windows 2008;
应用服务为weblogic10.3.6;
quartz依赖jar包为quartz-all-1.6.0.jar;
ora.quartz.jobStore.class=org.quartz.simpl.RAMJobStore;
出现问题
问题出现场景为定时获取数据库预警信息,并以邮件方式发送给指定接收人,但在生产环境部署后,发生了重复发送,问题定位到quartz的重复执行.
博客搜了大部分都是关于tomcat的和jobStore为JDBC模式的解决方案.其中tomcat是重复加载导致的,可通过修改tomcat的server.xml文件进行解决;jobStore为JDBC模式的可通过加锁来进行解决:org.quartz.jobStore.acquireTriggersWithinLock=true
但是都不适合我的情况
问题解决
后来注意到applicationContext.xml中关于调度器的配置,其中的lazy-init属性为"false",即容器启动就会实例化该bean,若值为"true",则第一次向容器通过getBean索取bean时实例化.猜测可能也属于是bean的重复实例化导致的问题,就将lazy-init = “true”,之后 测试环境测试不再重复执行,但生产仍然出现了重复执行的问题.
之后参考这位仁兄的博客
https://blog.csdn.net/zhujianpengzha/article/details/8140442
将quartz配置单独创建xml文件,并将lazy-init = "true"后,问题解决.
注:该笔记仅作为个人记录复习用,比较简略,见谅