2012-02-22 17 views
2

StdSchedulerFactoryからQuartz 2.0.1スケジューラを使用しています。最終的にQuartzスケジューラをシャットダウンする必要はありますか?

私はコード内にSchedulerExceptionをキャッチしています。

} finally { 
    scheduler.shutdown(); 
} 

または私はtryブロックでシャットダウンを実行する必要があります。

はfinallyブロックで、私はシャットダウンスケジューラをすべきか?

シャットダウン方法ではSchedulerExceptionが返される可能性があります。したがって、シャットダウンはfinallyブロック内にはないはずです。

答えて

0

スケジューラが正常に開始された場合、SchedulerExceptionは投げられないため、SchedulerExceptionのキャッチブロックに到達した場合、スケジューラが決して使用されなかったことになるのでfinallyブロックで実行する必要はありません開始しました。したがって、起動していないスケジューラーをシャットダウンしないでください。

ここには、homepageプロジェクトのサンプルプログラムがあります。

また
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.shutdown(呼び出すまで上記のリンク、

から、アプリケーションが終了しないこと)、そこになりますので、アクティブスレッド。

+0

、あなたがいない場合ので、アプリはおそらく停止しません。最終的なブロックは、アプリケーションの設計に応じて、適切な場所である場合とそうでない場合があります。アプリケーションのシャットダウン時にトリガされるイベントリスナは、 'scheduler.shutdown()'を置くための別の場所です。クォーツを停止しないと(例えば、Webアプリケーションで)、クラスローダーに関連した深刻なメモリリークが発生する可能性があります。 –

0

上記の回答では、起動/シャットダウン以外のコードがあると問題が発生する可能性があります。あなたは(そのようか何か)は、ArrayIndexOutOfBoundsExceptionになってしまいますので、アプリケーションがシャットダウンを呼び出すことはありません

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(); 
      System.out.println(args[5]); 
      scheduler.shutdown(); 

     } catch (SchedulerException se) { 
      se.printStackTrace(); 
     } 
    } 
} 

:たとえば、あなたがこのようなものを持っている場合。これを解決するにはいくつかの方法がありますが、最も単純なのは、すべての中間コードを例外ハンドラにラップし、その中のものを「処理」することでしょう。たとえば、次のように パブリッククラスQuartzTest換言すれば、あなたはほぼ確実にどこかにあなたのコード内から `)(` scheduler.shutdown呼び出すべきである{

public static void main(String[] args) { 

    try { 
     // Grab the Scheduler instance from the Factory 
     Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 

     // and start it off 
     scheduler.start(); 
     try { 
      System.out.println(args[5]); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     scheduler.shutdown(); 

    } catch (SchedulerException se) { 
     se.printStackTrace(); 
    } 
} 

}

関連する問題