`
傅庆岩
  • 浏览: 90410 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

quartz启动后,第一次,立即执行问题

阅读更多
  通过quartz配置一个任务,比如我设定每小时执行一次,比如15:28启动,预想结果应该是,在16:00第一次执行,然后类推。结果经常是,15:28就进行了第一次执行,也就是说quartz在启动时不按照预定排程执行了一次。这在实际操作中会带来不小的麻烦。
   具体产生这种原因可能是多方面的。可以多试试。
   如果是结合某些框架配置的,查查配置文件,可能在某地设置不对,配置文件就那么几个,逐段对照一下看看有什么异样。这个可能比较比较容易发现。还有一种,比较隐蔽。在CronTrigger中,依然可以设置startTime和endTime,这里有个问题,如果在开始时间或者结束时间设置的情况下,时间格式比较古怪,但是又是时间格式,就会产生额外的启动执行。这里我说的可能不是很清楚,如果你遇到此方面问题又恰好搜到了这里,可以看一下你设置CronTrigger的时候,如果设置了startTime或者endTime,可以尝试从这里入手,解决禁止第一次执行的问题。具体原因我一会儿去查查资料。
分享到:
评论
7 楼 angluil 2015-01-14  
5楼正解。
6 楼 taotling 2014-01-21  
5楼正解。
5 楼 w1122t 2013-07-05  
最近也遇到类似问题,不知道是不是和你说的是同一个问题;
是由于startTime在上一次执行时间(利用crontab表达式计算出)之前引起的;
解决办法是:
CronTriggerImpl trigger = new CronTriggerImpl();
trigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
将CronTrigger的misfireInstruction属性设置为CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING
4 楼 雁栖湖 2013-03-20  
又重新测试了一下,发现3楼的评论是错误的,可能是我当时测试错误了,抱歉。
以下是重新测试结果:
1、如果是设置的某个时间点启动任务,则不设置触发器启动时间就可以了。
2、如果是设置的时间间隔启动任务,则要设置触发器启动时间,即从什么时间开始第一次启动任务。

web.xml中<load-on-startup>0</load-on-startup>是设置容器启动时,载入此servlet。
如果不设置则永远不会启动此servlet(如果不手动执行此servlet),更不会启动任务。
皮已无,毛何存。
3 楼 雁栖湖 2013-01-16  
直接容器集成quartz的话,
web.xml中<load-on-startup>0</load-on-startup>,则容器启动时不执行任务
2 楼 ljjclub 2011-12-08  
ljjclub 写道
我quartz在启动时怎么没有执行呢,郁闷,他就是按照定的时间才执行;
配置文件如下

<bean id="Updater" class="com.ce.save.Updater"></bean>
<bean id="jobtask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="Updater" />
</property>
<property name="targetMethod">
<value>toDoUpdater</value>
</property>
<property name="concurrent" value="false"/>

</bean>
<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask" />
</property>
<property name="cronExpression">
<value>0 0 */1 * * ?</value>
</property>
</bean>
<bean id="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="doTime" />
</list>
</property>
</bean>

哪里有问题了?
1 楼 ljjclub 2011-12-08  
我quartz在启动时怎么没有执行呢,郁闷,他就是按照定的时间才执行;
配置文件如下

<bean id="Updater" class="com.ce.save.Updater"></bean>
<bean id="jobtask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="Updater" />
</property>
<property name="targetMethod">
<value>toDoUpdater</value>
</property>
<property name="concurrent" value="false"/>

</bean>
<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask" />
</property>
<property name="cronExpression">
<value>0 0 */1 * * ?</value>
</property>
</bean>
<bean id="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="doTime" />
</list>
</property>
</bean>

相关推荐

Global site tag (gtag.js) - Google Analytics