【发布时间】:2013-01-26 03:26:47
【问题描述】:
我正在使用 Quartz JDBC 作业存储 (org.quartz.impl.jdbcjobstore.JobStoreTX) 和 MySQL 来安排作业。
我有以下设置:
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource=foo
org.quartz.dataSource.foo.driver=com.mysql.jdbc.Driver
org.quartz.dataSource.foo.URL=jdbc:mysql://localhost:3306/myDB
org.quartz.dataSource.foo.user=user
org.quartz.dataSource.foo.password=*****
org.quartz.dataSource.foo.maxConnections=5
org.quartz.dataSource.foo.validateOnCheckout=true
org.quartz.dataSource.foo.validationQuery=SELECT 1
我可以安排工作,Quartz 在时间到期时从数据库中提取工作。
有些工作最多可以安排在未来 3 或 4 周内。我该如何测试?
现在我去手动更改系统时间。例如,如果我安排一个作业在 2013 年 2 月 5 日下午 12:45 运行,那么我将系统时钟时间更改为 2013 年 2 月 5 日下午 12:43,然后等待几分钟看看是否Quartz 接手了 DB 的工作。这对我来说很好。
我不想每次需要测试时都更改系统时钟时间。有没有更好的方法来做到这一点?
我注意到频繁更改系统时间有时会导致 Quartz 出现问题,导致某些工作未完成。
【问题讨论】:
-
您真的需要将工作安排在这么远的将来吗?为什么不能安排作业在几秒钟/几分钟的时间内运行?测试调度是否不够?
-
你可以检查getNextFireTime()。我认为如果安排得当,你必须相信 Quartz 会做正确的事情。您仍然需要测试它计划运行的作业是否正常工作。
-
@harpun - 我能够测试作业在几分钟/几小时和几天内运行。我必须支持该功能长达一个月。我想测试所有可能的场景,包括计划在 3 周内运行的场景。
-
那么我支持@JoshuaMartell 的想法来测试getNextFireTime() 并专注于测试工作本身。调度的棘手情况可能涉及 DST 时间变化的时间。
标签: jdbc quartz-scheduler job-scheduling