0

Quartz 1.6.6 を使用する Java アプリケーションがあります。これは、2 つのアプリケーション サーバーを含むアーキテクチャの Weblogic にデプロイされます。

アプリケーションには、定期的に (1 分に 1 回) 実行されるトリガー プロセスが含まれています。これは、Spring 3.1.1 (org.springframework.scheduling.quartz.SchedulerFactoryBean を使用) を使用して実現されます。

ジョブが 1 分に 1 回だけ実行されるようにアプリケーション サーバーが同期するように、Quartz のクラスタリング機能を利用できるようにするために、Java アプリケーションの EAR ファイルに Quartz.properties ファイルを含めました。ただし、アプリケーション ログを見ると、生成されたメッセージから、60 秒ごとに 2 つのジョブがまだ実行されていることがわかります。一方は他方から数秒遅れています。

これが紛らわしいのは、Quartz スケジューリングを組み込んだ別の Java アプリケーションがあり、非常にうまく機能しているように見えることです。この別のアプリケーションには、1 分ごとにトリガーを起動する同一のメカニズムがあり、ログからジョブが 60 秒に 1 回しか実行されていないことがわかります。

ジョブが実行された昨日の午後の例:

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がジョブストアとして選択されていることを示します。

于 2012-07-24T02:46:08.580 に答える
0

Quartz.properties を使用する代わりに、アプリケーション コンテキスト XML ファイル内の SchedulerFactoryBean 定義内にプロパティを含めます。

于 2012-08-07T00:57:01.640 に答える