1

Guice (Java)、Quartz スケジューラ、および iBatis ( iBaGuice ) を結び付けて、次のことを実行しようとしています。

  1. を使用してコマンド ライン ユーティリティ スキャナーを起動しますmain()
  2. フォーマットされた出力 (XML または YAML) を含むファイルのディレクトリ (引数として指定) を定期的にスキャンします
  3. ファイルが検出されると、解析して結果をデータベースに出力します

問題点:

  1. この例を使用して、Guice と Quartz を接続しました。ただし、コメントで質問している重要な詳細がいくつか欠けていますが、投稿はやや古いため、ここでも引用しています。
  1. スケジューラの設定方法は明らかではありません。をどこにどのように配線しますかTrigger(使用できますTrigger#makeMinutelyTrigger)?
  2. 私が実際に実行するジョブのタイプは 1 つだけです。JobFactory#newJob の詳細はTriggerFiredBundleパラメーターから来ていることは理解していますが、どこにどのように配線すればよいですか? そして、具体的なジョブをどこで/どのように作成または配線しますか?

PSScheduleProviderを作成して配線することで、もう少し先に進みました。今、この次のスニペットでジョブを実際にスケジュールする方法に行き詰まっています。私のJobFactory#newJobメソッドが呼び出されていないようです

public class CollectorServiceImpl implements CollectorService {
Scheduler scheduler;

/**
 * @throws SchedulerException
 */
@Inject
public CollectorServiceImpl(final SchedulerFactory factory, final GuiceJobFactory jobFactory)
        throws SchedulerException {
    scheduler = factory.getScheduler();
    scheduler.setJobFactory(jobFactory);
}

/**
 * @throws SchedulerException
 * @see teradata.quantum.reporting.collector.service.CollectorService#start()
 */
@Override
public void start() throws SchedulerException {
    Trigger trigger = TriggerUtils.makeMinutelyTrigger("MIN_TRIGGER");
    scheduler.scheduleJob(trigger); // this fails trigger validation since no job name is provided
    scheduler.start();
}

}

4

2 に答える 2

2

あなたの問題の核心は、実際にジョブクラスをスケジュールしていないことです:

getScheduler().scheduleJob(new JobDetail("myFooJob", null, FooJob.class),
        TriggerUtils.makeMinutelyTrigger("MIN_TRIGGER"));

http://www.codesmell.org/blog/2009/01/quartz-fits/の完全な回答とデモ コード

于 2010-04-07T19:56:02.763 に答える
0

本当にスケジューリングが必要ですか、それとも一定の間隔で繰り返しタスクを実行するだけですか? 後者の場合は、ExecutorService の Java ビルド、特に ScheduledThreadPoolExecutor を確認してください。フレームワーク全体を非常に単純なものに保存します:)

于 2010-04-06T19:19:28.000 に答える