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

wanmeianan 2013-09-12 04:14:09
我没有用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方法。
或者哪个大神知道是怎么回事?

...全文
648 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanmeianan 2013-09-17
  • 打赏
  • 举报
回复
引用 9 楼 olafo7 的回复:
呵呵,我前几天项目中正好也做了这个,可以由客户在页面上自定义启动的时间
自定义时间也一样,都会存在这样的问题。估计是quartz的一个BUG,因为我是main启动的。关掉的时候,如果下一次马上再执行main方法,可能由于线程池没有来得及回收,会执行好几次。如果过一会再执行main方法。就好了。
wanmeianan 2013-09-17
  • 打赏
  • 举报
回复
引用 12 楼 u010591547 的回复:
[quote=引用 9 楼 olafo7 的回复:] 呵呵,我前几天项目中正好也做了这个,可以由客户在页面上自定义启动的时间
那个你的做好没,可不可以给个案例啊[/quote] http://www.iteye.com/topic/441951 这里有一个。还提供页面。你可以直接下载,建好quartz表。可以直接用的。页面上配任务
u010591547 2013-09-16
  • 打赏
  • 举报
回复
引用 9 楼 olafo7 的回复:
呵呵,我前几天项目中正好也做了这个,可以由客户在页面上自定义启动的时间
那个你的做好没,可不可以给个案例啊
wanmeianan 2013-09-16
  • 打赏
  • 举报
回复
引用 7 楼 DaQiaoShang 的回复:
[quote=引用 6 楼 wanmeianan 的回复:] 试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG
执行两次,用到tomcat了吧[/quote] 请认真看下我的问题,我最开始就说了。main方法启动。没用到任何服务器。
wanmeianan 2013-09-16
  • 打赏
  • 举报
回复
引用 8 楼 DaQiaoShang 的回复:
[quote=引用 6 楼 wanmeianan 的回复:] 试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG
没加载一次配置文件,就会起一个定时器。[/quote] 都说过了。我在main方法里面启动quartz。又不是循环的去new,得到Application环境。
arles7 2013-09-14
  • 打赏
  • 举报
回复
呵呵,我前几天项目中正好也做了这个,可以由客户在页面上自定义启动的时间
w46 2013-09-14
  • 打赏
  • 举报
回复
引用 6 楼 wanmeianan 的回复:
试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG
没加载一次配置文件,就会起一个定时器。
w46 2013-09-14
  • 打赏
  • 举报
回复
引用 6 楼 wanmeianan 的回复:
试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG
执行两次,用到tomcat了吧
wanmeianan 2013-09-13
  • 打赏
  • 举报
回复
试过了,单例的也不行。还是执行两次。而且是并发的执行。我觉得可能是quartz的BUG
wanmeianan 2013-09-13
  • 打赏
  • 举报
回复
引用 1 楼 DaQiaoShang 的回复:
因为ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml"); 作业到时间执行时,每new一次,都会开启一个定时器。这样导致在作业到时时有多个作业同时进行。。。。。。。你把它写成单例就好了
我是在main方法里面执行的。就执行一次。应该不会new多个把?
wanmeianan 2013-09-13
  • 打赏
  • 举报
回复
引用 1 楼 DaQiaoShang 的回复:
因为ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml"); 作业到时间执行时,每new一次,都会开启一个定时器。这样导致在作业到时时有多个作业同时进行。。。。。。。你把它写成单例就好了
这个我是在main方法里执行的,没有用web,我怎么写成单例的?望大侠指点。
xiaohuashenshou 2013-09-13
  • 打赏
  • 举报
回复
引用 2 楼 u010591547 的回复:
楼主,你能不能教我一下quartz和SSH整合,客户可以添加动态定时任务,
spring里面有quartz的包,在web.xml中配置即可
u010591547 2013-09-13
  • 打赏
  • 举报
回复
楼主,你能不能教我一下quartz和SSH整合,客户可以添加动态定时任务,
w46 2013-09-13
  • 打赏
  • 举报
回复
因为ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml"); 作业到时间执行时,每new一次,都会开启一个定时器。这样导致在作业到时时有多个作业同时进行。。。。。。。你把它写成单例就好了

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧