私のチームは、Web アプリケーションを介して実行されているプロジェクトのいずれかがスケジュールより遅れて実行されている場合に、1 日に 1 回電子メールを送信するタスク スケジューラに関連付けたいと考えている Web アプリケーションを作成しました。
私たちが使用しているスケジューラ ライブラリ Cron4j は十分に単純であり、現時点では、次のような一連の Web サービス コールを通じて管理しようとしています (スケジューラを開始して実行するというアイデアです)。指定された時間または停止するまで):
public SchedulerResource(){
s = new Scheduler();
}
@GET
@Path("start")
@Produces(MediaType.APPLICATION_JSON)
public Response invoke_workback_communicator() throws MalformedURLException {
s.schedule("* * * * *", new Runnable() {
public void run() {
WorkbackCommunicator communicator = new WorkbackCommunicator();
communicator.run();
}
});
s.start();
try {
Thread.sleep(1000L * 60L * 2L);
} catch (InterruptedException e) {
;
}
s.stop();
return Response.noContent().build();
}
@GET
@Path("stop")
@Produces(MediaType.APPLICATION_JSON)
public Response stop_workback_communicator() throws MalformedURLException {
s.stop();
return Response.noContent().build();
}
現時点では、'invoke_workback' メソッドは正常に機能しますが、'stop_workback' メソッドは機能しません。
私が興味があるのは:
- この悪い習慣のように、Web サービスでスケジューラを呼び出していますか?
- もしそうなら、どうすればこの機能を効果的に達成できますか?
- そうでない場合、スケジューラ インスタンスを管理するサービス インターフェイスを作成するにはどうすればよいですか? これも必要ですか?
編集:
問題をさらに調べたところ、サーバーの起動およびシャットダウン時にスケジューラを起動または強制終了するために使用できる「ServletContextListener」と呼ばれるものがあることに気付きました。この時点で私が考えているのは、その機能をテストし、アプリがまだ実行されているときにスケジューラを管理できるようにするサービスを維持することです。