Quartz JDBC Job Store - 维护/清理

时间:2013-07-17 07:52:34

标签: quartz-scheduler

我目前正在使用JDBC作业存储在负载平衡环境中设置Quartz,我想知道每个人如何管理石英作业存储数据库。

对我来说,Quartz(2.2.0)将作为版本化应用程序的一部分进行部署,同时一台服务器上可能存在多个版本。我使用符号XXScheduler_v1来确保多个调度程序一起使用。我的代码工作正常,石英表适当地填充了触发器/作业/等。

我注意到的一件事是,在取消部署应用程序时似乎没有发生数据库清理。我的意思是,即使不再有调度程序处于活动状态,作业/调度程序数据似乎仍保留在石英数据库中。

这不太理想,我可以想象我的模型数据库会比随时间变化更大。我错过了如何连接一些清理过程吗?或石英希望我们手动进行数据库清理?

干杯!

4 个答案:

答案 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;