liutingting068 2010-03-03 10:22
浏览 200
已采纳

有关quartz任务调度的一个问题

各位大侠帮我看看,谢谢!
举个例
我添加了一个任务,开始时间是2010年3月1日,结束时间是2010年5月1日,调度时间是在这段日期间每天上午10点钟调度
调度任务数据是保存在数据库中的,每当tomcat启动时都会去加载当天的任务放入调度列表中,当到每天10点再进行调度。
但当我2010年3月3日上午9点钟启动tomcat时,它就将我这个任务放入调度列表,而且进行了一次调度.当到达10点钟时又进行了一次调度
问题是当tomcat启动时,还没到10点钟它就进行了一次调度?
另一个例子
同上
我添加了一个任务,开始时间是2010年3月3日,结束时间是2010年4月1日,调度时间是在这段日期间每天上午10点钟调度,当我2010年3月3日中午12点钟启动tomcat时,它就将我这个任务放入调度列表,而且进行了一次调度。
问题是10点钟过了它还会进行一次调度。应该要到第二天的10点才调度的呀。当然如果我是3月3日9点钟启动tomcat,它就只将今天的任务放入调度列表,到了10点才会去调度。

这个问题我想是在tomcat启动时,它都会将所有任务列表上一次可以调度的进行调度一次。
怎么设置在tomcat启动时不会去调度上一次的,只有在下一次任务到达时才进行调度呢?
这个问题怎么解决。
我用的是spring+hibernate+struts2+quartz

quartz.properties 配置内容
#===============================================================
#Configure Main Scheduler Properties
#===============================================================
org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO

#===============================================================
#Configure ThreadPool
#===============================================================
org.quartz.threadPool.threadCount = 1
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#===============================================================
#Configure JobStore
#===============================================================
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.misfireThreshold = 60000

web.xml 配置内容

Quartz Initializer Servlet
QuartzInitializer

org.quartz.ee.servlet.QuartzInitializerServlet


config-file
/quartz.properties


shutdown-on-unload
true


start-scheduler-on-load
true

5

  • 写回答

8条回答 默认 最新

  • iteye_10013 2010-03-08 17:38
    关注

    Job 的可恢复性

    当一个 Job 还在执行中,Scheduler 经历了一次非预期的关闭,在 Scheduler 重启之后可恢复的 Job 还会再次被执行。这个 Job 会再次重头开始执行。Scheduler 是没法知道在程序停止的时候 Job 执行到了哪个位置,因此必须重新开始再执行一遍。

    要设置 Job 为可恢复性,用下面的方法:

    public void setRequestsRecovery(boolean shuldRecover);

    public void setRequestsRecovery(boolean shuldRecover);
    默认时,这个值为 false,Scheduler 不会试着去恢复 job 的。

    from .
    找下你的配置里面相关的属性吧.

    还有表:QRTZ_JOB_DETAILS 存储每一个已配置的 Job 的详细信息
    create table QRTZ_JOB_DETAILS (
    JOB_NAME varchar(80) not null,
    JOB_GROUP varchar(80) not null,
    DESCRIPTION varchar(120) null,
    JOB_CLASS_NAME varchar(128) not null,
    IS_DURABLE bit not null, <== 这个
    IS_VOLATILE bit not null, <== or这个
    IS_STATEFUL bit not null,
    REQUESTS_RECOVERY bit not null,
    JOB_DATA image null
    )
    go

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题