我有一个使用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:46984 15:10:49583 15:11:46961 15:11:49561
这是我的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。
提前感谢您的任何帮助。
答案 0 :(得分: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。
答案 1 :(得分:0)
我已经使用了解决方法:在我的应用程序上下文XML文件中包含SchedulerFactoryBean定义中的属性,而不是使用quartz.properties。