当前位置:编程学习 > JAVA >>

spring quartz有时执行正常,有时执行好多次?

我没有用tomcat,直接通过main方法启动的。
 ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml");
       SchedulerService schedulerService = (SchedulerService)context.getBean("schedulerService");
       JobService jobService = (JobService) context.getBean("jobService");
       LoaderScheduler loaderScheduler = new LoaderScheduler();
       loaderScheduler.loader(jobService,schedulerService);
启动spring的时候,有时执行正常,但是有时一起执行了好几次。我已经把quartz的配置文件。spring-quartz.xml独立出来了。不过过一会就好了。只是启动的时候有时执行正常。有时执行好几次。比如我每10秒执行一次。0/10 * * ? * * *  ,启动spring容器之后,有时正常,有时1-5次不等。
哪个大神遇到过这种情况?

启动spring,有时正常,执行1次。有时同时执行好几次?如果组件扫描实例化了多次。应该每次都执行几次啊。我现在用cron表达式 0/10 * * ? * * *  , 10秒执行一次。Quartz会在每分钟的10秒,20秒,30秒,40,50,00,开始执行。我出错的时候一般都是在不足整秒的时候。也就是说。可能在15秒,18秒这样的时间。执行多次。直到到整秒的时候才开始运行正常。直接执行下面的代码。后面的都注销了。问题一样得不到解决。
ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml");

我怀疑这个貌似是quartz的bug。它在计算秒的任务的时候。或者是多线程同时执行executeInternal方法。
或者哪个大神知道是怎么回事?

--------------------编程问答-------------------- 因为ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml");
作业到时间执行时,每new一次,都会开启一个定时器。这样导致在作业到时时有多个作业同时进行。。。。。。。你把它写成单例就好了 --------------------编程问答-------------------- 楼主,你能不能教我一下quartz和SSH整合,客户可以添加动态定时任务, --------------------编程问答--------------------
引用 2 楼 u010591547 的回复:
楼主,你能不能教我一下quartz和SSH整合,客户可以添加动态定时任务,
spring里面有quartz的包,在web.xml中配置即可 --------------------编程问答--------------------
引用 1 楼 DaQiaoShang 的回复:
因为ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml");
作业到时间执行时,每new一次,都会开启一个定时器。这样导致在作业到时时有多个作业同时进行。。。。。。。你把它写成单例就好了


这个我是在main方法里执行的,没有用web,我怎么写成单例的?望大侠指点。 --------------------编程问答--------------------
引用 1 楼 DaQiaoShang 的回复:
因为ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml");
作业到时间执行时,每new一次,都会开启一个定时器。这样导致在作业到时时有多个作业同时进行。。。。。。。你把它写成单例就好了



我是在main方法里面执行的。就执行一次。应该不会new多个把? --------------------编程问答-------------------- 试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG --------------------编程问答--------------------
引用 6 楼 wanmeianan 的回复:
试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG

执行两次,用到tomcat了吧 --------------------编程问答--------------------
引用 6 楼 wanmeianan 的回复:
试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG

没加载一次配置文件,就会起一个定时器。 --------------------编程问答-------------------- 呵呵,我前几天项目中正好也做了这个,可以由客户在页面上自定义启动的时间 --------------------编程问答--------------------
引用 8 楼 DaQiaoShang 的回复:
Quote: 引用 6 楼 wanmeianan 的回复:

试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG

没加载一次配置文件,就会起一个定时器。


都说过了。我在main方法里面启动quartz。又不是循环的去new,得到Application环境。 --------------------编程问答--------------------
引用 7 楼 DaQiaoShang 的回复:
Quote: 引用 6 楼 wanmeianan 的回复:

试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG

执行两次,用到tomcat了吧


请认真看下我的问题,我最开始就说了。main方法启动。没用到任何服务器。 --------------------编程问答--------------------
引用 9 楼 olafo7 的回复:
呵呵,我前几天项目中正好也做了这个,可以由客户在页面上自定义启动的时间




那个你的做好没,可不可以给个案例啊 --------------------编程问答--------------------
引用 12 楼 u010591547 的回复:
Quote: 引用 9 楼 olafo7 的回复:

呵呵,我前几天项目中正好也做了这个,可以由客户在页面上自定义启动的时间




那个你的做好没,可不可以给个案例啊



http://www.iteye.com/topic/441951


这里有一个。还提供页面。你可以直接下载,建好quartz表。可以直接用的。页面上配任务 --------------------编程问答--------------------
引用 9 楼 olafo7 的回复:
呵呵,我前几天项目中正好也做了这个,可以由客户在页面上自定义启动的时间



自定义时间也一样,都会存在这样的问题。估计是quartz的一个BUG,因为我是main启动的。关掉的时候,如果下一次马上再执行main方法,可能由于线程池没有来得及回收,会执行好几次。如果过一会再执行main方法。就好了。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,