项目用到定时任务,采用spring + quartz 实现,目前系统启动后大概运行6-8个小时后,后台定时任务全部消失,在日志中没有定时任务的log了。大家有没有遇到过这个情况,请大家帮忙解决。谢谢。 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="demoJobTrigger"/>
</list>
</property>
</bean> <bean id="demoJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="demoJob" />
<property name="startDelay" value="10000" />
<property name="repeatInterval" value="60000" />
</bean>

<bean name="demoJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.redloop.brand.cronjob.impl.DemoJob" />
<property name="jobDataAsMap">
<map />
</property>
</bean>

解决方案 »

  1.   

    你的job一分钟运行一次 你确定他能在一分钟内执行完吗
    执行不完的话 你是怎么处理的? 
      

  2.   

    3楼说的对,定时任务很可能会堵塞,导致失效.
    你在job的配置里加上
    <property name="concurrent" value="false" />
    试试吧
      

  3.   

    一定不会堵塞,job里面只是触发其他的线程,然后就退出了。
      

  4.   

    我用quartz1.6.6 spring 2.5.6 
    factory用的是MethodInvokingJobDetailFactoryBean
    trigger用的是CronTriggerBean
    scheduler用的是SchedulerFactoryBean
    也许版本不太一样吧
      

  5.   

    也许,也许是cpu调度不过来了。多线程太费系统资源了。
    30个线程一起跑,可能是这个原因。
    自己想了个办法解决了。每个触发器对应一个factory,因为quartz这个在线程调度的时候,有时候是单线程,有时候是多线程,如果好多job都被factory加载到一个线程堆栈中,就可能出现cpu无法及时调度的问题。
    谢谢liufeng0209