Quartz任务调度(3)存储与持久化操作配置详细解析

  • 时间:
  • 浏览:0
  • 来源:UU快3—全天最准大发快三

我们我们我们我们 再次运行测试法律法律依据,假使 马上中断应用应用程序,查询我们我们我们我们 数据库,会看过如下内容:

SELECT * FROM QRTZ_SIMPLE_TRIGGERS;

+————-+————–+—————+————–+—————–+—————–+

| SCHED_NAME | TRIGGER_NAME | TRIGGER_GROUP | REPEAT_COUNT | REPEAT_INTERVAL | TIMES_TRIGGERED |

+————-+————–+—————+————–+—————–+—————–+

| MyScheduler | trigger1 | DEFAULT | 9 | 4000 | 1 |

+————-+————–+—————+————–+—————–+—————–+

1 row in set (0.00 sec)

调用此法律法律依据,我们我们我们我们 在数据库中异常中断任务记录就会被读取执行,假使 被删除掉。

执行测试法律法律依据,能看过控制台打印如下日志信息,关注红色偏离 ,更注意其中的粗体偏离 ,是我们我们我们我们 quartz调用数据库的许多信息:

假使 我们我们我们我们 再运行应用应用程序,发现报错了。

org.quartz.ObjectAlreadyExistsException: Unable to store Job : ‘jgroup1.job1’, because one already exists with this identification.

一般的,在我们我们我们我们 的任务调度前,会先将相关的任务持久化到数据库中,假使 调用完在删除记录,这里在应用应用程序开始英文英文英语 试图将任务信息持久化到数据库时,显然和(因为我们我们我们我们 原本中断操作因为)数据库中占据 的记录起了冲突。

其中各表的含义如下所示:

4. 我们我们我们我们 还时需配置Datasource 属性

因为我们我们我们我们 的数据库平台没在后边列出,那末最好的选择假使 ,直接使用标准的 JDBC 代理 org.quartz.impl.jdbcjobstore.StdDriverDelegate 就能正常的工作。

要将JobDetail等信息持久化我们我们我们我们 的数据库中,我们我们我们我们 可按一下步骤操作:

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Freed 1 triggers from ‘acquired’ / ‘blocked’ state.

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Handling 1 trigger(s) that missed their scheduled fire-time.这里我们我们我们我们 开始英文英文英语 解决上一次异常未完成的存储在数据库中的任务记录

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Recovering 0 jobs that were in-progress at the time of the last shut-down.

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Recovery complete.

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 ‘complete’ triggers.

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 1 stale fired job entries.

INFO : org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED started.

在21:42:13扒取新闻

在21:42:13扒取新闻

在21:42:14扒取新闻

在21:42:15扒取新闻

在21:42:16扒取新闻

在21:42:17扒取新闻

在21:42:18扒取新闻

在21:42:19扒取新闻

在21:42:20扒取新闻

在21:42:21扒取新闻

在21:42:22扒取新闻

在21:42:23扒取新闻

在21:42:24扒取新闻

在21:42:25扒取新闻

在21:42:26扒取新闻

在21:42:27扒取新闻

在21:42:28扒取新闻

在21:42:29扒取新闻

在21:42:400扒取新闻

我们我们我们我们 会发现,“扒取新闻”一句的信息打印次数超过十次,但我们我们我们我们 在任务调度中设置了打印十次,说明它恢复了上次的任务调度。

而因为我们我们我们我们 愿意执行新的任务,只想纯粹地恢复原本异常中断任务,我们我们我们我们 还不都可以采用如下法律法律依据:

Quartz默认使用RAMJobStore,它的优点是传输带宽。因为所有的 Scheduler 信息都保占据 计算机内存中,访问你这人 数据随着电脑而更慢。而不想访问数据库或IO等操作,但它的缺点是将 Job 和 Trigger 信息存储在内存中的。因而我们我们我们我们 每次重启应用应用程序,Scheduler 的请况,包括 Job 和 Trigger 信息都丢失了。

Quartz 的内存 Job 存储的能力是由原本叫做 org.quartz.simple.RAMJobStore 类提供。在我们我们我们我们 的quartz-2.x.x.jar包下的org.quartz包下即存储了我们我们我们我们 的默认配置quartz.properties。打开你这人 配置文件,我们我们我们我们 会看过如下信息

你这人 原本,我们我们我们我们 还不都可以选择修改我们我们我们我们 的job名和组名和triiger名,假使 再运行我们我们我们我们 的应用应用程序。查看控制台打印的信息偏离 展示如下:

INFO : org.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl

INFO : org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.2.2 created.

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Using thread monitor-based data access locking (synchronization).

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - JobStoreTX initialized.

INFO : org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.2) ‘MyScheduler’ with instanceId ‘NON_CLUSTERED’

Scheduler class: ‘org.quartz.core.QuartzScheduler’ - running locally.

NOT STARTED.

Currently in standby mode.

Number of jobs executed: 0

Using thread pool ‘org.quartz.simpl.SimpleThreadPool’ - with 3 threads.

Using job-store ‘org.quartz.impl.jdbcjobstore.JobStoreTX’ - which supports persistence. and is not clustered.



INFO : org.quartz.impl.StdSchedulerFactory - Quartz scheduler ‘MyScheduler’ initialized from default resource file in Quartz package: ‘quartz.properties’

INFO : org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.2.2

INFO : com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool… com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 400, acquireRetryDelay -> 4000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> z8kfsx9f1dp34iubvoy4d|7662953a, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> z8kfsx9f1dp34iubvoy4d|7662953a, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:34006/quartz?characterEncoding=utf-8, lastAcquisitionFailureDefaultUser -> null, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 5, maxStatements -> 0, maxStatementsPerConnection -> 120, minPoolSize -> 1, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Freed 0 triggers from ‘acquired’ / ‘blocked’ state.

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Recovering 0 jobs that were in-progress at the time of the last shut-down.这里代表在我们我们我们我们 任务开始英文英文英语 时,先从数据库查询旧记录,你这人 旧记录是原本因为应用应用程序中断等因为未能正常执行的,于是先Recovery回来并执行

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Recovery complete.

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 ‘complete’ triggers.

INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 stale fired job entries.



INFO : org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_NON_CLUSTERED started.

在21:28:12扒取新闻

在21:28:13扒取新闻

在21:28:15扒取新闻

在21:28:17扒取新闻

….

配置好quartz.properties属性文件后,我们我们我们我们 假使 **将它装进类路径下,假使 运行我们我们我们我们 的应用应用程序,即可覆盖在quartz.jar包中默认的配置文件

编写我们我们我们我们 的测试文件,我们我们我们我们 的测试环境是在quartz-2.2.2版本下进行的。下面的测试用例引用了上篇文章 ,关于Quartz的快速入门配置可移步参考这篇文章。

Quartz 提供了两种类型的持久性 JobStore,为JobStoreTX和JobStoreCMT,其中:

1. JobStoreTX为独立环境中的持久性存储,它设计为用于独立环境中。这里的 “独立”,我们我们我们我们 是指原本原本环境,在其中不占据 与应用容器的事物集成。这里不想因为你不还不都可以在原本容器中使用 JobStoreTX,只不过,它全是设计来让它的事特受容器管理。区别就在于 Quartz 的事物是是否是要参与到容器的事物中去。

2. JobStoreCMT 为应用应用程序容器中的持久性存储,它设计为当你愿意应用应用程序容器来为你的 JobStore 管理事物时,假使 你这人 事物要参与到容器管理的事物边界时使用。它的名字明显是来源于容器管理的事物(Container Managed Transactions (CMT))。

下面是我们我们我们我们 的原本quartz.properties属性文件配置实例:

在 /docs/dbTables 目录下存放了几乎所有数据库的的SQL脚本,这里的 是解压 Quartz 分类分类整理包后的目录。我们我们我们我们 使用常用mysql数据库,下面是示例sql脚本代码