今天在开发一个功能的时候,需要用到定时器在某个时间段进行定时执行,项目里面原来就配置有跟定时器相关的配置了,大致如下,配置今天在开发一个功能的时候,需要用到定时器在某个时间段进行定时执行,项目里面原来就配置有跟定时器相关的配置了,大致如下,配置了一个 定时器工厂类
triggers 是说工厂类有哪些执行计划,大概是图下这样,具体就不说什么意思,百度一下即可
然后我模仿加了一个自己的定时任务配置进来,为了测试,我把它设置为1分钟执行一次
然后我启动服务器,但是过了好几分钟都没有执行,还发现连以前的定时任务都没执行了,,,
因为启动服务器的时候也没有报错,所以我也只能猜测了
1, 猜测idea有bug, 重启idea 还是不行
2. 怀疑电脑长时间没关有缓存,重启电脑也不行
3. 把项目直接放到tomcat 运行也不行,
都不行以后又尝试了其他操作,后来突然看到里面有一份持久化的配置
<property name="configLocation" value="classpath:quartz.properties" />
随后把这个注释掉,再次启动服务器,定时器就正常运行了!所以就是因为这个定时器的问题导致的了,
至于是什么原因导致的,我目前也不知道,因为程序也没有报错,只是定时任务直接不能运行了,最后的解决方法是
清空里面的表格,当然,我首先是复制一份到我本地数据库来测试一下,首先,把定时任务里面配置的数据表的结构同步到我
本地的数据库,然后你需要在 qrtz_locks 插入原来就有的几条数据
INSERT INTO `QRTZ_LOCKS`(`LOCK_NAME`) VALUES ('CALENDAR_ACCESS');
INSERT INTO `QRTZ_LOCKS`(`LOCK_NAME`) VALUES ('JOB_ACCESS');
INSERT INTO `QRTZ_LOCKS`(`LOCK_NAME`) VALUES ('MISFIRE_ACCESS');
INSERT INTO `QRTZ_LOCKS`(`LOCK_NAME`) VALUES ('STATE_ACCESS');
INSERT INTO `QRTZ_LOCKS`(`LOCK_NAME`) VALUES ('TRIGGER_ACCESS');
一定要插入,否则会报错,然后其他表格的数据全部清空即可,启动时 工厂会自动生成数据,但是不会自动创建表,所以你需要同步所有的数据表过来,然后插入那上边几条数据到表中,所有表大概有
这个应该是官网有的,自行百度,然后就行了,定时任务又可以正常运行了
到此为止,定时任务没有执行的问题就是出现在持久化上,但是没有报错有点坑,可能都太好找,现在我也不知道具体是啥问题,只是把表格清空让他重新生成了一下