0

我有一个使用 Quartz 1.6.6 的 Java 应用程序。它部署在Weblogic上,其架构包括两个应用服务器。

该应用程序包括一个定期运行的触发过程 - 每分钟一次。这是使用 Spring 3.1.1(使用 org.springframework.scheduling.quartz.SchedulerFactoryBean)实现的。

我在 Java 应用程序的 EAR 文件中包含了一个quartz.properties 文件,希望能够利用 Quartz 的集群设施,以便应用程序服务器能够同步自己,以便该作业每分钟只运行一次。但是,在查看应用程序日志时,很明显可以从生成的消息中看到,每 60 秒仍有两个作业在运行 - 一个比另一个慢几秒钟。

令人困惑的是,我有另一个 Java 应用程序,其中包含了 Quartz 调度,它似乎工作得非常愉快。这个其他应用程序具有每分钟触发一次触发器的相同机制,从日志中我可以看到该作业每 60 秒只运行一次。

昨天下午作业已运行的时间示例:

15:10:46,984 15:10:49,583 15:11:46,961 15:11:49,561

这是我的quartz.properties 文件:

org.quartz.scheduler.instanceName=QuartzClusteredScheduler
org.quartz.scheduler.instanceId=AUTO

org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=5

org.quartz.dataSource.dbDS.driver=oracle.jdbc.driver.OracleDriver
org.quartz.dataSource.dbDS.URL=jdbc:oracle:thin:@MY_DB:1521:my_sid
org.quartz.dataSource.dbDS.user=username
org.quartz.dataSource.dbDS.password=password

org.quartz.dataSource.dbDS.maxConnections=5

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate

org.quartz.jobStore.isClustered=true
org.quartz.jobStore.dataSource=dbDS
org.quartz.jobStore.tablePrefix=QRTZ_

我查看了 Quartz 特定表的数据库,但其中根本没有数据,这让我认为属性文件由于某种原因没有被拾取。但是,我不明白为什么,因为我在 WAR 的 WEB-INF/classes 下的 EAR 文件中包含了quartz.properties。

提前感谢您的任何帮助。

4

2 回答 2

0

您能否在日志中看到石英调度程序启动时的输出:

[INFO] 23 Jul 10:41:08.813 PM main [com.mchange.v2.c3p0.C3P0Registry]
Initializing c3p0-0.9.1.1 [built 15-March-2007 01:32:31; debug? true; trace: 10]

[INFO] 23 Jul 10:41:08.842 PM main [org.quartz.impl.StdSchedulerFactory]
Using default implementation for ThreadExecutor

[INFO] 23 Jul 10:41:08.876 PM main [org.quartz.core.SchedulerSignalerImpl]
Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl

[INFO] 23 Jul 10:41:08.876 PM main [org.quartz.core.QuartzScheduler]
Quartz Scheduler v.2.2.0-SNAPSHOT created.

[INFO] 23 Jul 10:41:08.878 PM main [org.quartz.impl.jdbcjobstore.JobStoreTX]
Using thread monitor-based data access locking (synchronization).

[INFO] 23 Jul 10:41:08.879 PM main [org.quartz.impl.jdbcjobstore.JobStoreTX]
JobStoreTX initialized.

[INFO] 23 Jul 10:41:08.880 PM main [org.quartz.core.QuartzScheduler]
Scheduler meta-data: Quartz Scheduler (v2.2.0-SNAPSHOT) 'TestScheduler' 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 12 threads.
  Using job-store 'org.quartz.impl.jdbcjobstore.JobStoreTX' - which supports         persistence. and is not clustered.


[INFO] 23 Jul 10:41:08.880 PM main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler 'TestScheduler' initialized from default resource file in Quartz         package: 'quartz.properties'

[INFO] 23 Jul 10:41:08.880 PM main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler version: 2.2.0-SNAPSHOT


[INFO] 23 Jul 10:41:08.949 PM main         [com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource]
Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge1678o1eqj5izxjkbki|12b31a7c, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.apache.derby.jdbc.ClientDriver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge1678o1eqj5izxjkbki|12b31a7c, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:derby://localhost:1527//tmp/bug.db;create=true, 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 ]

这表明您的quartz.properties 被使用并且JobStoreTX 被选为jobstore。

于 2012-07-24T02:46:08.580 回答
0

我使用了解决方法:在我的应用程序上下文 XML 文件中包含 SchedulerFactoryBean 定义中的属性,而不是使用quartz.properties。

于 2012-08-07T00:57:01.640 回答