记录quartz定时器遇到的问题

本文分享了一位开发者在公司业务中使用Quartz定时框架遇到的问题及解决方案。主要问题是在集群模式下,不同项目共用数据库导致的任务执行错误。通过调整配置,将集群模式改为单机模式,并为Quartz相关表添加前缀,实现了在同一数据库中隔离各项目定时任务的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司业务中有定时需求选中了quartz这个定时框架,在使用中遇见了很多的问题

  1. 最初始遇见了java.lang.NoSuchMethodException和java.lang.classNotFoundException这个两个错误,一看就知道是没有找打方法和类的错误信息,但是我所有定时器里面的方法都是public所以不可能是方法作用域引起的问题,然后经过了解知道quartz是一个集群定时框架(公司业务太忙没有时间详细了解)在你启动项目的时候会把你的信息储存到数据库里面,然后在执行任务的时候会随机选择一个节点去执行,这就找到问题所在了(我们的项目好多都是用的一个数据库然后在启动的时候都会注册到quartz里面)QRTZ_SCHEDULER_STATE 在这个表里面就能看见,有多少个实例被注册进去了,然后在执行任务的时候随机找到一个节点去执行,在那个节点里面没有这个方法和这个类,就产生了这个错误。然后我就开始研究quartz单机执行,修改配置文件
Properties prop = new Properties();
// 集群模式修改为false
prop.put("org.quartz.jobStore.isClustered", "false");

但是并不好用,而且QRTZ_SCHEDULER_STATE这个表里面已经不存在实例了。
问题依旧出现,在一个项目创建定时任务,其他项目执行的问题。
也不知道有没有大佬能看见,解决我的疑惑,现在依然没有解决。
就只能把quartz需要的十一个表复制出去,加一个前缀
比如:a_QRTZ_SCHEDULER_STATE
加一个a_
继续修改配置文件,修改表前缀

prop.put("org.quartz.jobStore.tablePrefix", "a_QRTZ_");

以后所有数据就都会往带有这个前缀的表里增删改查
就临时解决了这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值