- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能给个建议?我有一份工作每小时运行一次,并且由 Quartz 1.8.3 在 Java webapp 中控制。
但我看到的是,Quartz 有时似乎会提前一秒开始工作。但由于没有明显的模式,因此很难纠正。
我的代码是:
Scheduler_Job sj = Scheduler_Job_DB.get(1);
sj.setJobRunning(Valid.TRUE);
Scheduler_Job_DB.update(sj);
SQLDateTime currPollDateTime = SQLDateTime.getSQLDateTimeNow();
currDateTimeNow 被设置为 17:59:59 而它应该是 18:00:00。
Quartz 作业的 cron 触发器是 0 0 * * * ?
方法 SQLDateTime.getSQLDateTimeNow();只需获取以毫秒为单位的当前计数并将其转换为 java.sql.Date 和 java.sql.time 元素,如下所示:
public static SQLDateTime getSQLDateTimeNow() {
long milliSecs = DateTime_Utils.getTimeInMilliseconds();
Date date = new Date(milliSecs);
Time time = new Time(milliSecs);
SQLDateTime sqldt = new SQLDateTime(Date.valueOf(date.toString()), Time.valueOf(time.toString()));
return sqldt;
}
类 SQLDateTime 简单地有两个变量如下:
private Date sqlDate;
private Time sqlTime;
并且在使用以 yyyy-mm-dd HH:mm:ss 格式存储在数据库中的日期和时间时很方便。
在 99.9% 的情况下这很好,但我不明白为什么作业似乎提前一秒触发?
我应该补充一点,升级到 Quartz 2.x 不是一个选项。
有什么想法吗?
我的解决方案是保持简单。因此,如果 Quartz 作业在给定时间触发,并且如果我将作业的详细信息存储在数据库表中,那么我还可以存储当前运行时间和日期,例如YYYY-MM-DD 18:00:00。
因此作业启动,它从数据库中读取包括日期和时间在内的详细信息,并进行 18:00:00 的所有更新。
然后在作业结束时,当前运行时间和日期增加一个小时,并写回数据库以用作下一次运行日期和时间。因此,18:00:00 变为 19:00:00,并且日期保持不变,除非作业在 23:00:00 运行。
所以一切都是同步的,没有毫秒。
无论如何理论上听起来不错......
最佳答案
可能是不同的时钟略有偏移,所以当 quartz 调度程序在 18:00:00 005 启动时,数据库可能仍然认为它是 17:59: 59980.
如果这对您来说确实是个问题,您可能希望让线程 hibernate 数百毫秒,以便它始终正确。
关于java - Quartz 调度程序和作业 'firing' 早一秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8420106/
我有一个 javascript 函数,可以执行以下操作; 它将日期编辑框设置为与另一个日期编辑相同的日期。但是我希望它将 txt_Testin
我有一个输入框,类型为“时间”。我想将迟到时间 (23:00pm) 作为最小值,将早期时间 (6:00am) 作为最大值 - 创建一个 23pm - 6am 的范围。 (即中午 11 点、中午 12
使用 Joda 时间并获得类似以下行为的最简单方法是什么: public boolean check( DateTime checkTime ) { DateTime someTime = n
我想计算 updated_at 比 created_at 早 2 小时的记录。 代码 $teLang = $kentekens->where('updated_at', '>', 'created_a
我是一名优秀的程序员,十分优秀!