`
傅庆岩
  • 浏览: 91599 次
  • 性别: 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>

相关推荐

    quartz自动执行一定时

    我们要实现定时执行某个方法时,就可以在job目录中加入自己的方法类,但要实现GCJobInterface接口,重写execute 方法即可

    定时器quartz的使用方法

    "来配置触发器,这意味着任务将在每分钟的第0秒至第5秒之间执行一次。你可以根据需求修改这个表达式,以实现不同频率的定时执行。 如果你想在服务启动时自动执行任务,并且之后按指定间隔重复,可以将上述代码整合...

    Quartz_Scheduler_Example_Programs_and_Sample_Code.pdf Version 2.2.1

    "` 表示每 15 分钟执行一次),可以精确控制作业的执行时机。 - **CronTrigger 配置**:创建 CronTrigger 对象时,需指定 Cron 表达式,并关联到具体的 Job。 ##### 示例 4:作业参数与状态 在实际应用中,往往...

    基于SpringBoot+Quartz的轻量级分布式定时任务调度系统源码+项目说明+sql数据库.zip

    - 执行一次:调度过期后,执行一次,并从当前时间开始重新计算下次触发时间; - 放弃执行(默认):调度过期后,忽略过期的任务,从当前时间开始重新计算下次触发时间; - 是否并发执行:单机串行或者并发执行 ...

    定时执行程序逻辑

    - **Cron表达式**:在Unix/Linux系统中,Cron是一种常见的定时任务工具,通过使用Cron表达式(如`* * * * *`表示每分钟执行一次)来设定任务执行的时间。 - **Windows任务计划程序**:在Windows系统中,我们可以...

    java.util.timer实现的简单定时任务

    例如,如果你想在5秒后执行一次任务,可以这样做: ```java Timer timer = new Timer(); SimpleTask task = new SimpleTask(); timer.schedule(task, 5000); // 参数为延迟毫秒数 ``` 如果希望任务能周期性执行,...

    java 定时任务管理框架

    3. **任务调度**:支持多种调度策略,如定时执行、一次性执行、依赖于其他任务执行等。 4. **状态控制**:可以随时暂停、恢复或删除任务,方便对任务执行状态进行实时控制。 5. **日志记录**:记录任务执行情况,...

    当当网开源的分布式作业调度组件 Elastic-Job.zip

    目录结构说明使用步骤开发指南使用限制运维平台阅读源码编译问题说明实现原理作业分片策略监控快速上手(感谢第三方志愿者 泽伟@心探索科技 提供文档)InfoQ新闻Elastic-Job Wiki (由社区志愿者自由编辑的) ...

    Java-Web定时器使用.doc

    `timer.schedule(TimerTask, 0, 60 * 60 * 1000)`这行代码设置了定时任务,它立即开始执行(因为第一个参数是0),然后每60分钟执行一次(60 * 60 * 1000毫秒表示1小时)。 `SampleTask`类扩展了`TimerTask`,并...

    java时间触发器配置方法

    这个例子中,任务会在创建后立即开始,并且每5秒执行一次。 以上三种方式都可以实现Java中的时间触发器配置,具体选择哪种取决于你的需求和项目环境。初学者可以通过阅读提供的详细说明文档和代码配置文件,进一步...

    C#定时任务

    // 立即触发,然后每60秒触发一次 ``` 三、Quartz.NET库 对于更复杂和灵活的定时任务需求,可以使用第三方库如Quartz.NET。Quartz.NET是一个开源的作业调度框架,支持Cron表达式和复杂的调度策略。你可以创建Job...

    cron表达式.zip

    "则表示每天的14:00和18:00的每5分钟执行一次任务。 对于需要更精确调度的用户,可能经常遇到手动构建复杂cron表达式的困难。这时,cron表达式生成器便显得尤为有用。一个名为"CronExpBuilder(表达式生成器).jar"的...

    scheduler

    `Timer`类是Java早期提供的一个简单的定时任务调度器,它可以执行一次性的定时任务或者周期性的定时任务。然而,`Timer`存在线程安全问题,不适用于多线程环境。相比之下,`ScheduledExecutorService`是Java并发包`...

    java发送Email

    在这个例子中,`sendEmail()`方法会在程序启动后立即执行,并且每隔一小时执行一次。你可以根据实际需求调整定时任务的间隔。 通过这些基础知识,你应该能够理解如何使用Java发送电子邮件,以及如何实现定时发送...

Global site tag (gtag.js) - Google Analytics