Quartz JDBC Job Store-Maintenance / Cleanup

问题描述 投票:4回答:4

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

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

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

这不理想,我可以想象,随着时间的推移,数据库将变得比所需的更大。我是否错过了如何进行一些清理程序的工作?还是石英期望我们手动进行数据库清理?

干杯!

quartz-scheduler
4个回答
0
投票

取消部署应用程序或关闭调度程序时,绝对不会进行任何数据库清理。您必须在应用程序关闭期间构建一些清除代码(即,构建某种StartupServlet或上下文侦听器,以对destroy()事件生命周期进行清除)


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)重新启动您的应用程序,然后将新插入所有删除的任务和相关条目到上面的表中(只要您的应用程序具有其逻辑权限)。

这更像是在第一次安排所有任务的情况下启动您的应用程序。因此,您必须记住,任务的行为就像刚插入的一样。

注意:如果这不起作用,则应用您为表准备的备份,并尝试更紧密地调试。到目前为止,我还没有看到这种方法失败。

您不会丢失任何东西。

但是,这些石英表与您在数据模型中使用的任何适用的数据库对象没有什么不同。您添加了Employees表,并且在以后的版本中不再需要它。谁负责删除旧表?只有你。如果您是DBA,则可以将其滚动到DBA;)。

这种维护通常使用卸载脚本/向导,升级脚本/向导或在新版本的应用程序首次启动期间进行。


附带说明,通常不同的应用程序至少使用不同的数据库或使用不同的架构,从而减少了相互依赖性。

要清理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;

0
投票

您不会丢失任何东西。


0
投票

要清理Quartz Scheduler内部数据,需要更多的SQL:

© www.soinside.com 2019 - 2024. All rights reserved.