今天折腾这个crontriggerbean
可把我给累坏。事情是这样的,我不是有个项目要用到定时任务嘛之前一直用的挺好的,结果今天突然发现有时候跑,有时候又不跑,给我整懵。
一开始我还以为是服务器的问题,各种检查,结果发现服务器好好的,啥毛病没有。然后我就开始怀疑是不是我写的定时任务的代码有问题,翻来覆去看好几遍,也没发现啥不对劲的地方。这下可把我给急坏,这项目还等着上线,这定时任务出问题可咋整。
没办法,我只能上网找资料。搜一大圈,发现好多人都遇到过类似的问题。有人说是springboot
的问题,说它只会在下次触发时间才去访问数据库,然后通过数据库的cron来改变定时。但我这项目也不是springboot
的,这说法肯定不对。
然后又看到有人说,可能是少quartz-all-1.6.*
这个包,导致没有对应属性cronExpression
的setter方法。我赶紧去检查一下我的项目,发现这个包是有的,这也不是问题所在。
头疼,继续找原因
继续在网上找资料,看到有人说要把xxxTriggerBean
替换成xxxTriggerFactoryBean
,说是spring的建议。我当时就想,这靠谱吗?不过死马当活马医,我就试着改一下。结果,你猜怎么着?还真就好!
不过我这心里还是有点不踏实,我就想知道这到底是为啥。然后我就去翻翻spring的文档,发现原来是spring4.x版本之后和quartz 2.x版本集成的时候,CronTriggerBean
有些问题,所以建议用CronTriggerFactoryBean
来代替。
这下我才算明白,原来是版本兼容性的问题。看来以后遇到问题,还是得多看看官方文档,不能光在网上瞎搜。
- 总结一下这回的教训:
- 遇到问题不要慌,先冷静分析。
- 多看看官方文档,有时候答案就在那里。
- 版本兼容性问题是个大坑,要小心。
今天的分享就到这里。希望我的这回经历能给大家提个醒,以后少走弯路。