我目前正在使用JDBC作业存储在负载平衡环境中设置Quartz,我想知道每个人如何管理石英作业存储数据库。
对我来说,Quartz(2.2.0)将作为版本化应用程序的一部分进行部署,同时一台服务器上可能存在多个版本。我使用符号XXScheduler_v1来确保多个调度程序一起使用。我的代码工作正常,石英表适当地填充了触发器/作业/等。
我注意到的一件事是,在取消部署应用程序时似乎没有发生数据库清理。我的意思是,即使不再有调度程序处于活动状态,作业/调度程序数据似乎仍保留在石英数据库中。
这不太理想,我可以想象我的模型数据库会比随时间变化更大。我错过了如何连接一些清理过程吗?或石英希望我们手动进行数据库清理?
干杯!
答案 0 :(得分:6)
一旦我遇到这个问题,这就是我为纠正这个问题所做的工作。这肯定会起作用,但如果没有,那么我们将备份表格,这样你在尝试时就不会有任何松动。
1)使用 Taking backup of single table
中提到的方法对以下表进行sql转储 a) QRTZ_CRON_TRIGGERS
b) QRTZ_TRIGGERS
c) QRTZ_JOB_DETAILS
2)按顺序删除上表中的数据
delete from QRTZ_CRON_TRIGGERS
delete from QRTZ_TRIGGERS
delete from QRTZ_JOB_DETAILS
3)重新启动您的应用程序,然后在上表中新填充所有已删除的任务和相关条目(假设您的应用程序的逻辑正确)。
这更像是在首次安排所有任务的情况下启动您的应用。因此,您必须记住,任务的行为就像新插入的一样。
注意:如果这不起作用,则应用您为表执行的备份,并尝试更紧密地进行调试。截至目前,我还没有看到这种方法失败。
答案 1 :(得分:0)
在取消部署应用程序或关闭调度程序时,绝对不会进行任何数据库清理。您必须在应用程序关闭期间构建一些清理代码(即构建某种类型的StartupServlet或上下文侦听器,以便在destroy()事件生命周期中进行清理)
答案 2 :(得分:0)
你没有遗漏任何东西。
但是,这些石英表与您在数据模型中使用的任何应用程序DB对象没有区别。您添加Employees
表,在以后的版本中,您不再需要它。谁负责删除旧桌子?只有你。如果你是DBA,你可以在DBA上滚动它;)。
这种维护通常使用卸载脚本/向导,升级脚本/向导或在新版本中首次启动应用程序时完成。
另一方面,通常不同的应用程序使用不同的数据库,或者使用不同的模式,从而减少相互依赖性。
答案 3 :(得分:0)
要清除Quartz Scheduler内部数据,还需要更多SQL:
delete from QRTZ_CRON_TRIGGERS;
delete from QRTZ_SIMPLE_TRIGGERS;
delete from QRTZ_TRIGGERS;
delete from QRTZ_JOB_DETAILS;
delete from QRTZ_FIRED_TRIGGERS;
delete from QRTZ_LOCKS;
delete from QRTZ_SCHEDULER_STATE;