时区切换导致quartz定时任务没有触发问题
时区切换对Quartz的cron表达式有影响,切换的1小时内停止触发定时任务,导致sla没有定时清空内存计数,误发限流。
美国夏令时PST切换到冬令时PDT,会有时间跳变。不带时区跳变的,会出现时间重叠或不连续
问题复现
mac本机模拟,把时区换成美国的,然后把时间调到11月5号01:59
import java.text.ParseException;
import java.util.Date; import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory; public class QuartzTester { public static void main(String[] args) throws ParseException, SchedulerException,
InterruptedException {
JobDetail jobDetail = new JobDetail("jobDetail", "jobDetail-1", QuartzDemo.class);
CronTrigger trigger = new CronTrigger();
trigger.setName("triggerTest");
trigger.setCronExpression("0/5 * * * * ?"); Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger); while (true) {
long current = System.currentTimeMillis();
System.out.println("normal time now=" + current + ", Date=" + new Date());
Thread.sleep(5000);
}
} public static class QuartzDemo implements Job { @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
long current = System.currentTimeMillis();
System.out.println("Job now=" + current + ", Date=" + new Date());
} } }
1、把本地时间调到11-05 00:59
normal time now=1509857964930, Date=Sun Nov 05 00:59:24 EDT 2017
Job now=1509857965025, Date=Sun Nov 05 00:59:25 EDT 2017
normal time now=1509857969932, Date=Sun Nov 05 00:59:29 EDT 2017
Job now=1509857970012, Date=Sun Nov 05 00:59:30 EDT 2017
normal time now=1509857974935, Date=Sun Nov 05 00:59:34 EDT 2017
Job now=1509857975017, Date=Sun Nov 05 00:59:35 EDT 2017
normal time now=1509857979940, Date=Sun Nov 05 00:59:39 EDT 2017
Job now=1509857980020, Date=Sun Nov 05 00:59:40 EDT 2017
normal time now=1509857984944, Date=Sun Nov 05 00:59:44 EDT 2017
Job now=1509857985021, Date=Sun Nov 05 00:59:45 EDT 2017
normal time now=1509857989949, Date=Sun Nov 05 00:59:49 EDT 2017
Job now=1509857990013, Date=Sun Nov 05 00:59:50 EDT 2017
normal time now=1509857994952, Date=Sun Nov 05 00:59:54 EDT 2017
Job now=1509857995011, Date=Sun Nov 05 00:59:55 EDT 2017
normal time now=1509857999954, Date=Sun Nov 05 00:59:59 EDT 2017
normal time now=1509858004959, Date=Sun Nov 05 01:00:04 EDT 2017
normal time now=1509858009959, Date=Sun Nov 05 01:00:09 EDT 2017
normal time now=1509858014962, Date=Sun Nov 05 01:00:14 EDT 2017
normal time now=1509858019966, Date=Sun Nov 05 01:00:19 EDT 2017
normal time now=1509858024970, Date=Sun Nov 05 01:00:24 EDT 2017
从Nov 05 01:00开始,quartz的定时任务就停了
2、把本地时间调到11-05 01:10
信息: Quartz scheduler version: 1.5.2
Nov 05, 2017 1:10:07 AM org.quartz.core.QuartzScheduler start
信息: Scheduler DefaultQuartzScheduler$NON_CLUSTERED started.
normal time now=1509858607008, Date=Sun Nov 05 01:10:07 EDT 2017
normal time now=1509858612016, Date=Sun Nov 05 01:10:12 EDT 2017
normal time now=1509858617018, Date=Sun Nov 05 01:10:17 EDT 2017
normal time now=1509858622022, Date=Sun Nov 05 01:10:22 EDT 2017
normal time now=1509858627022, Date=Sun Nov 05 01:10:27 EDT 2017
normal time now=1509858632026, Date=Sun Nov 05 01:10:32 EDT 2017
normal time now=1509858637030, Date=Sun Nov 05 01:10:37 EDT 2017
normal time now=1509858642030, Date=Sun Nov 05 01:10:42 EDT 2017
quartz的定时任务一直没有触发
3、把本地时间调到11-05 01:59
normal time now=1509861583050, Date=Sun Nov 05 01:59:43 EDT 2017
normal time now=1509861588058, Date=Sun Nov 05 01:59:48 EDT 2017
normal time now=1509861593061, Date=Sun Nov 05 01:59:53 EDT 2017
normal time now=1509861598066, Date=Sun Nov 05 01:59:58 EDT 2017
normal time now=1509861603070, Date=Sun Nov 05 01:00:03 EST 2017
normal time now=1509861608072, Date=Sun Nov 05 01:00:08 EST 2017
normal time now=1509861613076, Date=Sun Nov 05 01:00:13 EST 2017
normal time now=1509861618080, Date=Sun Nov 05 01:00:18 EST 2017
normal time now=1509861623081, Date=Sun Nov 05 01:00:23 EST 2017
normal time now=1509865173966, Date=Sun Nov 05 01:59:33 EST 2017 //这里调整了系统时间
normal time now=1509865178970, Date=Sun Nov 05 01:59:38 EST 2017
normal time now=1509865183975, Date=Sun Nov 05 01:59:43 EST 2017
Job now=1509865185057, Date=Sun Nov 05 01:59:45 EST 2017
normal time now=1509865188977, Date=Sun Nov 05 01:59:48 EST 2017
Job now=1509865190012, Date=Sun Nov 05 01:59:50 EST 2017
normal time now=1509865193980, Date=Sun Nov 05 01:59:53 EST 2017
Job now=1509865195015, Date=Sun Nov 05 01:59:55 EST 2017
normal time now=1509865198985, Date=Sun Nov 05 01:59:58 EST 2017
Job now=1509865200022, Date=Sun Nov 05 02:00:00 EST 2017
normal time now=1509865203990, Date=Sun Nov 05 02:00:03 EST 2017
Job now=1509865205011, Date=Sun Nov 05 02:00:05 EST 2017
normal time now=1509865208995, Date=Sun Nov 05 02:00:08 EST 2017
Job now=1509865210016, Date=Sun Nov 05 02:00:10 EST 2017
normal time now=1509865214000, Date=Sun Nov 05 02:00:14 EST 2017
Job now=1509865215019, Date=Sun Nov 05 02:00:15 EST 2017
从夏令时的2点跳到冬令时的1点,quartz的定时任务没有开始执行,直到冬令时的2点,quartz的定时任务才开始执行。
结论
从夏令时的1点开始,到冬令时的2点,quartz都没触发定时任务,所以期间重启服务器也没用。
受时区影响的影响的:
Date()的分钟级加减
Calendar
mysql
把Date时间转成字符串,再转回Date
quartz的cron表达式
本机时区设置


时区切换导致quartz定时任务没有触发问题的更多相关文章
- Quartz定时任务和IIS程序池闲置超时时间冲突解决方案
一.问题描述 Bs项目中用Quartz功能执行一个定时任务(每隔5分钟执行一个Job),正常情况,Quartz定时任务会5分钟执行一次,但IIS程序池闲置 超时默认为20分钟,造成的结果是:定时任务只 ...
- quartz定时任务框架的使用
quartz定时任务时间设置 这些星号由左到右按顺序代表 : * * * * * * * ...
- Quartz定时任务使用小记(11月22日)
骤然接触quartz,先从小处着手,why,what,how quartz定时任务: 为什么使用quartz定时任务,以及定时任务在实际应用场景下的特定需求. 1.用户方面的需要,为了提供更好的使用体 ...
- quartz定时任务时间配置
quartz定时任务时间设置描述(2011-03-03 16:23:50)转载▼标签: quartz时间it 分类: 凌乱小记 这些星号由左到右按顺序代表 : * * * ...
- 对quartz定时任务的初步认识
已经好久没有写技术博文了,今天就谈一谈我前两天自学的quartz定时任务吧,我对quartz定时任务的理解,就是可以设定一个时间,然后呢,在这个时间到的时候,去执行业务逻辑,这是我的简单理解,接下来看 ...
- Spring整合Quartz定时任务执行2次,Spring定时任务执行2次
Spring整合Quartz定时任务执行2次,Spring定时任务执行2次 >>>>>>>>>>>>>>>&g ...
- Quartz 定时任务时间设置
转自https://blog.csdn.net/zdx1515888659/article/details/79158169 quartz定时任务时间设置: 这些星号由左到右按顺序代表 : * * * ...
- quartz定时任务及时间设置
quartz 定时任务时间设置1.这些星号由左到右按顺序代表 : * * * * * * * ...
- quartz定时任务框架的使用以及原理
quartz定时任务时间设置 这些星号由左到右按顺序代表 : * * * * * * * ...
随机推荐
- Python学习笔记五
一. 递归 递归函数: def a (): print ("from b") b() def b(): print("from a ") a() a() 递推和 ...
- Mongodb字段自增长
MongoClient client = new MongoClient("mongodb://xxx.xxx.x.xx:27017"); var mongServer = cli ...
- Gradle 使用笔记
Springboot2.0 多模块打包问题 打包命令由gradle build 变成 gradle bootJar 或 gradle bootWar buildscript { repositorie ...
- hibernate 保存报错 Hibernate operation: could not get next sequence value;
错误信息: [2017-09-28 18:51:38,854]-[org.hibernate.util.JDBCExceptionReporter:101] ERROR - Numeric Overf ...
- tensorflow会话控制-【老鱼学tensorflow】
在tensorflow中,当定义好结构后,就要通过tf.session()来建立运行时的会话. 本例子应该不难理解,我们用tensorflow来计算一下一个1行2列的矩阵和2行1列矩阵的乘积: imp ...
- Linux安装RocketMQ
本文介绍Linux安装RocketMQ. 1.RocketMQ简介 RocketMQ是阿里巴巴中间件开发的分布式消息系统,曾经经历过很多阿里巴巴大型项目的实际检验.在去年已经正式捐献给Apache开源 ...
- Python中re的match、search、findall、finditer区别
原文地址: http://blog.csdn.net/djskl/article/details/44357389 这四个方法是从某个字符串中寻找特定子串或判断某个字符串是否符合某个模式的常用方法. ...
- BZOJ.4942.[NOI2017]整数(分块)
BZOJ 洛谷 UOJ 可能是退役之前最后一个BZOJ rank1了? 参考这里. 如果没有减法,对一个二进制数暴力进位,均摊复杂度是\(O(1)\)的(要进\(O(n)\)次位就至少需要\(O(n) ...
- 如果往错误的NEO地址转账会发生什么
昨天聊天有人用NEO往错误地址转账丢钱了 我的第一反应是这不可能 Neo使用的地址带有验证功能 最下面ARPP-.G6ce这一串是个base58编码 把他解开就是17-.151f7b5f这一串 红 ...
- 69. x 的平方根
问题描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: ...