質問
Java Web アプリケーションで 1 つの関数を定期的に実行する必要があります。あるクラスの関数を定期的に呼び出すにはどうすればよいですか?サーバーの高負荷などのイベントが発生したときに関数を呼び出す方法はありますか。crontabとは何ですか?その作業は定期的に行われますか?
他のヒント
あなたが使用することができ、より堅牢な何かが必要な場合はクォーツする
crontab
については、Unixマシン上のスケジューリングツールです。
サーバが高負荷を持っている時にメソッドを呼び出すためには、少なくとも二つの可能なアプローチがあります。お使いのアプリケーションサーバーを使用して、その動作を監視し、progrommatic行動を取ることができるようになる管理フックを持っているかもしれません。 Alterntaivelyあなたには、いくつかのシステム監視機能(例えばチボリかのOpenView)を持っており、それは「イベント」を生成し、(例えば)JMSメッセージなどのイベントを提供し、サーバーがそれらを拾う持ってすることも難しくはありません。
しかし、あなたが達成したいかについてもう少し説明したいかもしれません。適応型アプリケーションbeahviourは、権利を取得するのは非常に難しいかもしれません。
、ウェブサーバでそれをしません。それはIMO非常に間違ったアプローチだろう。それはあなたがUnixライクなオペレーティングシステム上にある場合、代わりにcron
を使用することをお勧めします。 Windowsサーバは、同様の機能を提供します。
私たちは、定期的に一つの機能を実行する必要があります Java Webアプリケーションでの
(1)だからあなたのデプロイメントディスクリプタ(web.xmlファイル)起動時に起動するリスナーを定義して見えます。
いくつかのクラスの関数を呼び出す方法 定期的に?
関数を呼び出す方法はあります 一部のイベントは、高負荷のように発生したとき サーバーでというように
(3)と、Javaを使用づけしているシステムの状態をチェックしてもシステムprogsの(稼働時間等)を実行し、出力を解析するために、いくつかのスレッドを実行します。
crontabファイルが別のJVMを起動します方法が、Javaの実行可能性があり、それが実際にサーブレットコンテナでホットなものである:同じJVM内のすべての実行
は、java.util.concurrentのを忘れてはいけない - それはスケジューリングのためのクラスをたくさん持っている、例えばScheduledThreadPoolExecutorのは、簡単なタイマーよりも多くを必要とする場合。
のhttp:/ /java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.htmlする
のJava 1.4へのそれのバックポートもあります: http://backport-jsr166.sourceforge.net のます。
、あなたは春のタスク実行フレームワークを見てすることがあります - として、タスクとしてメソッドに注釈を付けると労働者に委譲し、実際の作業プロセッサで機能を実装するための@Scheduledと@Asyncを使用してで説明します:
ます。http://ブログ.springsource.com / 2010/01/05 /タスクスケジューリングの簡素化・イン・スプリング3-0 / の
利点は、あなたの春のコンテキストでのcronに似た構文を使用してタイマーを定義することができますし、タスクを設定するために特別な何かを必要としないということです、それはまた、Java EEアプリケーションにうまく統合されており、Webサーバとよく果たすべき(これはカスタムスレッドは常にやっていない傾向がある)。
あるクラスの関数を定期的に呼び出すにはどうすればよいですか?
解決策はいくつかあります。ある タイマー, 、次のような Java cron 実装 cron4j, 石英, 、あるいは EJBタイマーAPI. 。どちらを選択するかは、状況に大きく依存します。アプリケーションの種類、使用されているテクノロジー、ジョブの数など。
サーバーの高負荷などのイベントが発生したときに関数を呼び出す方法はありますか
ジョブで JMX を使用して、情報にアクセスして監視し、特定の条件下でアクションをトリガーすることもできます。ただし、これはイベントベースではなくプル モードです。