1

ユーザーが定期的なタスクと非定期的なタスクをスケジュールできるようにする機能を構築しています。これらのスケジュールをデータベースに保存し、アクティブなスケジュールを 1 日 1 回読み取って、今日トリガーする必要があるかどうかを確認する必要があります。

私は春/Javaを使用しています。このロジックを自分で作成すると、不足し、効率が低下するのではないかと心配しています。

必要なスケジュール構成は、時間に関することを除けば、Outlook の予定表と同じです。(おそらく、私のレンディションを読むよりも、Outlook の定期的な会議を開く方が簡単です):

  • 実際の日付
  • 開始日に基づいて N 日ごと
  • 開始日に基づいて N 営業日ごと
  • 開始日に基づいて、1 対多の選択 (日、月、火など) で N 週ごと
  • 開始日に基づく N か月ごとの (1st,2nd,3rd,4th,last) (Sun,Mon,Tue,etc...)
  • 開始日に基づく、y か月ごとの X 日
  • 毎年 (1 月、2 月、3 月、4 月など) N 日ごと
  • (1st,2nd,3rd,4th,last) (Sun,Mon,Tues,etc...) の (jan,feb,mar,apr,etc..) ごと


これを実装するための簡単なパターンは何ですか? 助けてくれてありがとう

4

2 に答える 2

2

Quartz ジョブスケジューラ

探しているものは、Quartz Job Scheduler Libraryで簡単に実現できます。

将来のイベントのスケジューリングが可能で、cron構文を使用することもできます。

プロジェクトページからの抜粋:

Quartz ジョブスケジューリングライブラリとは?

Quartz は豊富な機能を備えたオープン ソースのジョブ スケジューリング ライブラリであり、最小のスタンドアロン アプリケーションから最大の e コマース システムまで、ほぼすべての Java アプリケーションに統合できます。Quartz を使用して、数万、数百、さらには数万のジョブを実行するための単純または複雑なスケジュールを作成できます。タスクが標準の Java コンポーネントとして定義されているジョブは、プログラムで実行するようにプログラムできるほぼすべてのものを実行できます。Quartz Scheduler には、JTA トランザクションやクラスタリングのサポートなど、多くのエンタープライズ クラスの機能が含まれています。

Quartz は自由に使用でき、Apache 2.0 ライセンスの下でライセンスされています。

概要を参照してください。

例 #3を参照してください。

于 2014-05-15T16:12:31.470 に答える
1

独自のロジックを作成する場合、Spring を使用しているため、Spring が提供する機能の一部を利用できます ( spring-framework-reference )

しかし、欲しいものを正確に手に入れるには多くの課題に直面しているため、それを利用したことはありません

QuartzInitializerServlet

別の方法は、組み込みのQuartzInitializerServletを利用することです。このメソッドは、スケジューラ インスタンスを取得してそこからロジックを実装できるという点で、はるかに柔軟です。

Web アプリケーションで起動時のロード サーブレットとして構成されている場合、Quartz の初期化に使用できるサーブレット。

この起動サーブレットを使用することは、状況によっては QuartzInitializerListener を使用するよりも好ましい場合があります。つまり、同じアプリケーションで複数のスケジューラを初期化したい場合です。

次のようなものを WEB-INF/web.xml ファイルに追加します。

 <servlet>
     <servlet-name>
         QuartzInitializer
     </servlet-name>
     <display-name>
         Quartz Initializer Servlet
     </display-name>
     <servlet-class>
         org.quartz.ee.servlet.QuartzInitializerServlet
     </servlet-class>
     <load-on-startup>
         1
     </load-on-startup>
     <init-param>
         <param-name>config-file</param-name>
         <param-value>/some/path/my_quartz.properties</param-value>
     </init-param>
     <init-param>
         <param-name>shutdown-on-unload</param-name>
         <param-value>true</param-value>
     </init-param>
     <init-param>
         <param-name>wait-on-shutdown</param-name>
         <param-value>true</param-value>
     </init-param>
     <init-param>
         <param-name>start-scheduler-on-load</param-name>
         <param-value>true</param-value>
     </init-param>
 </servlet>

StdSchedulerFactory インスタンスは ServletContext に格納されます。次のように、ServletContext インスタンスからファクトリにアクセスできます。

 StdSchedulerFactory factory = (StdSchedulerFactory) ctx
            .getAttribute(QuartzFactoryServlet.QUARTZ_FACTORY_KEY);
于 2014-05-16T03:25:57.850 に答える