问题:
最近开了一个新项目,spring boot 整合了quartz,出现了一个问题,就是当项目连接到本地电脑的数据库时,一切正常。但是当项目连接远程linux上的数据库的时候,发现定时任务不灵了,也不是不执行,比如手动执行一次这个操作,点一下没反应,再点一下,却执行两次。
调试:
看了下源码,整个手动执行一次的逻辑是这样的:
1、当页面点执行一次,后台qrtz_triggers表会插入一条新记录,代表马上要执行了
2、在org.quartz.core.QuartzSchedulerThread#run方法中,有个查询triggers的方法:
triggers = qsRsrcs.getJobStore().acquireNextTriggers…
3、查到trigger后,就去执行,完了再删掉那条新记录
现在的问题是在第二步,查询triggers的时候,换成本地数据库,就能查出来,换成远程数据库,就查不出来了(也不是一直查不出来,连续点两次,就能查出来了,这个才是最诡异的地方)
既然是这个情况,首先排除代码问题,因为很明显就是因为数据库不一样引起的问题。
一开始还以为是因为本地数据库只有一个服务在连,而远程数据库,可能有多个同事在用,所以会有影响。
但是在更换多个数据库后发现,只要是远程数据库,都会出现这种诡异现象。
解决
根本问题这个没有解决,因为上面是测试环境,部署到线上环境的时候,这个问题又消失了,一切正常。等有时间了,还是要看看,总感觉没找到问题所在。