一、简介
在内网机使用 Quartz 时,一直在打印警告:This scheduler instance is still active but was recovered by another instanc.....
错误原因:该 Quartz 定时任务被多台机器执行,各个机器之间时间不同步,Quartz为保证数据一致性,后启动的定时任务不会执行
注意:下面操作在内网机实现,有些过程没有贴图
解决办法如下
二、解决方法
1、关闭其他机器 Quartz 定时任务
保证 Quartz 定时任务只有一台机器执行,可在 Quartz 配置文件 quartz.properties,添加 org.quartz.jobStore.isClustered=false
或者在 springboot 配置文件 application.yaml 添加 spring.quartz.properties.org.quartz.jobStore.isClustered=false
2、同步各机器时间
参考 https://www.jianshu.com/p/9bd350dcd151
机器说明:
- 192.168.10.100:NTP 服务器
- 192.168.10.101:客户端
①、NTP 服务器
修改注册表:
win+r 输入 regedit.exe 进入注册表编辑器,修改如下路径的参数值
# 把默认的 10 改为 5,5 的意思就是自身为可靠的时间源
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W32Time\Config AnnounceFlags=5
# 将默认的 0,改为 1,1 为启用NTP服务器。
计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W32Time\TimeProviders\NtpServer Enabled=1
管理员进入 CMD,执行如下命令
net stop w32time
net start w32time
w32tm /stripchart /computer:127.0.0.1,有时间回显说明配置成功了
C:\WINDOWS\system32>w32tm /stripchart /computer:127.0.0.1
正在跟踪 127.0.0.1 [127.0.0.1:123]。
当前时间是 2022/7/8 20:02:43。
20:02:43, d:+00.0001958s o:+00.0000809s [ * ]
20:02:45, d:+00.0003058s o:+00.0001023s [ * ]
20:02:47, d:+00.0002958s o:+00.0000309s [ * ]
添加防火墙规则
控制面板 —> 系统和安全 —> windows防火墙- --> 高级设置 —> 入站规则(右键) —> 新建规则 —> 端口 —> 下一步 ----> UDP ----> 特定本地端口:123
②、客户端同步 NTP 服务器时间
客户端 192.168.10.101 同步 192.168.10.100(NTP 服务器)时间
控制面板 -----> 时钟和区域 -----> 时期和时间 -----> Internet 时间 -----> 更改设置
点击立即更新发现同步服务器时间成功
三、结果
查看 Quartz 定时任务发现警告消失