Quartzチュートリアル-クイックスタート

6308 ワード

quartzクイック入門チュートリアルへようこそ.このチュートリアルを読むと、次のことがわかります.
  • quartzダウンロード
  • quartz取付
  • 必要に応じてQuartz
  • を構成します.
  • は、例示的なアプリケーション
  • を開始する.
    quartzスケジューリングの基本機能を熟知した後、Whereなどのより高度な特性を試してみることができます.このエンタープライズ機能は、jobとtriggerをランダムなTerracottaクライアントではなく指定されたもので実行することができます.

    ダウンロードとインストール


    まず、最新の安定版をダウンロードします.登録しなくてもいいです.解凍してインストールします.

    Quartz jarファイル


    quartzインストールパッケージルートディレクトリのlib/ディレクトリの下にはjarパッケージがたくさんあります.そのうち、quartz-xxx.JAr(xxxはバージョン番号)が最も主要です.quartzを使用するには、jarパケットをアプリケーションのclasspathの下に置く必要があります.
    ダウンロード後、解凍してquartz-xxx.JArはあなたのアプリケーションに入れます.
    私は主にアプリケーションサーバの環境でquartzを使用しているので、一般的にquartz jarパッケージをアプリケーションに入れます(.earまたは.war).もちろん、多くのアプリケーションでquartzを使用したい場合は、quartzのjarパッケージをアプリケーションサーバ(appserver)のclasspathの下に置けばいいです.独立したアプリケーションでquartzを使用したい場合は、quartzのjarパッケージとアプリケーションに依存する他のjarパッケージを一緒に置くだけでいいです.
    quzrtzは、quartzインストールパッケージのlibディレクトリの下にあるサードパーティ製ライブラリ(jarパッケージの形式)に依存します.quartzのすべての機能を使用するには、すべてのサードパーティjarパッケージをclasspathの下に置く必要があります.独立したquartzアプリケーションを開発している場合は、すべてのjarパッケージをclasspathの下に置くことをお勧めします.アプリケーションサーバ環境でquartzを使用する場合は、classpathにすでに存在するパッケージがある可能性がありますので、自分で選択する必要があります.
    アプリケーションサーバ環境では、同じjarファイルに2つの異なるバージョンがある場合、奇妙な結果が発生する可能性があります.例えば、WebLogicはservletと共にJ 2 EEの実装(weblogic.jar)を含む.JArの実装は一致しない可能性があります.この場合、servletはアプリケーションから除外する必要があります.jar、これでどのクラスが使われているかがわかります.

    propertiesファイル


    quartzはquartzという名前を使用する.propertiesのプロファイル.最初は必須ではありませんでしたが、最も基本的な構成を使用するにはclasspathの下にある必要があります.
    私の個人的な状況に基づいて例を挙げて、私の応用はWebLogic Workshopに基づいて開発されました.quartz.propertiesを含むすべてのプロファイルをアプリケーション・ルートの下のプロジェクトに配置します.プロジェクトをパッケージ化するとearファイルの場合、プロファイルを配置する項目はjarパッケージとして最終的に入ります.だからバッグだpropertiesファイルはclasspathに自動的に配置されます.
    quartzを使用したWebアプリケーションを構築する準備ができている場合は、quartz.propertiesファイルはWEB-INF/classesディレクトリの下に置きます.

    コンフィギュレーション


    ここには多くの内容が含まれています.quartzは構成が柔軟なアプリケーションです.quartzを構成する最善の方法は、quartzを編集することです.propertiesファイルをアプリケーションのclasspathの下に置きます.
    quartzのインストールパッケージには、example/ディレクトリの下にあるプロファイルの例が含まれています.自分のquartzを作成することをお勧めします.propertiesファイルは、単純に例から不要な部分をコピーして削除するのではなく、コピーします.これにより、より清潔に見え、quartzのより多くの機能も理解できます.
    quartzプロファイルの詳細については、Quartzプロファイルリファレンスを参照してください.
    quartzを使うために、基本的なquartzです.propertiesプロファイルは次のとおりです.
    org.quartz.scheduler.instanceName = MyScheduler
    org.quartz.threadPool.threadCount = 3
    org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

    上記構成のschedulerには、次のような特徴があります.
  • org.quartz.scheduler.instanceName-schedulerの名前は「MyScheduler」
  • です.
  • org.quartz.threadPool.threadCount-スレッドプールには3つのスレッドがあり、つまり最大3つのjobを同時に実行することができる.
  • org.quartz.jobStore.class-quartzのjobとtriggerの構成を含むすべてのデータは、データベースではなくメモリに格納されます.quartzのデータベースストレージ機能を使用する場合は、データベースストレージを使用する前に、メモリストレージ(RamJobStore)を使用することをお勧めします.

  • 適用例


    quartzをダウンロードしてインストールした後、サンプルアプリケーションを開発し、走らせる時だ.次のサンプルコードは、schedulerインスタンスオブジェクトを取得し、起動して閉じます.
    QuartzTest.java
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.impl.StdSchedulerFactory;
    import static org.quartz.JobBuilder.*;
    import static org.quartz.TriggerBuilder.*;
    import static org.quartz.SimpleScheduleBuilder.*;
    
    public class QuartzTest {
    
        public static void main(String[] args) {
    
            try {
                // Grab the Scheduler instance from the Factory
                Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    
                // and start it off
                scheduler.start();
    
                scheduler.shutdown();
    
            } catch (SchedulerException se) {
                se.printStackTrace();
            }
        }
    }

    StdSchedulerFactoryを呼び出すとgetDefaultScheduler()schedulerインスタンスオブジェクトを取得し、schedulerを呼び出す.shutdown()の前にschedulerは終了しません.アクティブなスレッドが実行されているからです.
    注意サンプルコードの静的インポート(static import)は、次のコードでも使用されます.
    ログ出力を構成していない場合は、次のようなすべてのログがコンソールに出力されます.
    [INFO] 21 Jan 08:46:27.857 AM main [org.quartz.core.QuartzScheduler]
    Quartz Scheduler v.2.0.0-SNAPSHOT created.
    
    [INFO] 21 Jan 08:46:27.859 AM main [org.quartz.simpl.RAMJobStore]
    RAMJobStore initialized.
    
    [INFO] 21 Jan 08:46:27.865 AM main [org.quartz.core.QuartzScheduler]
    Scheduler meta-data: Quartz Scheduler (v2.0.0) 'Scheduler' 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 50 threads.
      Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
    
    
    [INFO] 21 Jan 08:46:27.865 AM main [org.quartz.impl.StdSchedulerFactory]
    Quartz scheduler 'Scheduler' initialized from default resource file in Quartz package: 'quartz.properties'
    
    [INFO] 21 Jan 08:46:27.866 AM main [org.quartz.impl.StdSchedulerFactory]
    Quartz scheduler version: 2.0.0
    
    [INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler]
    Scheduler Scheduler_$_NON_CLUSTERED started.
    
    [INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler]
    Scheduler Scheduler_$_NON_CLUSTERED shutting down.
    
    [INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler]
    Scheduler Scheduler_$_NON_CLUSTERED paused.
    
    [INFO] 21 Jan 08:46:27.867 AM main [org.quartz.core.QuartzScheduler]
    Scheduler Scheduler_$_NON_CLUSTERED shutdown complete.

    start()とshutdown()の間で面白いことをすることができます.
    // define the job and tie it to our HelloJob class
    JobDetail job = newJob(HelloJob.class)
        .withIdentity("job1", "group1")
        .build();
    
    // Trigger the job to run now, and then repeat every 40 seconds
    Trigger trigger = newTrigger()
        .withIdentity("trigger1", "group1")
        .startNow()
        .withSchedule(simpleSchedule()
                .withIntervalInSeconds(40)
                .repeatForever())            
        .build();
    
    // Tell quartz to schedule the job using our trigger
    scheduler.scheduleJob(job, trigger);

    shutdown()を呼び出す前に、jobのトリガと実行に時間を残す必要があります.例えば、Threadを呼び出すことができます.sleep(60000)はスレッドをしばらく眠らせた.
    さあ、自分で探しに行きましょう.
  • 原文リンク
  • このシリーズのチュートリアルはquartz-2.2.x公式ドキュメントの翻訳、整理から来て、同じquartzに興味のある友达にいくつかの参考と助けを望んで、いかなる不当あるいは間違いがあって、指摘を歓迎します;ソースコードの研究に興味のある方は、quartz-coreソースコードの注釈(進行中)を参考にしてください.