サブスクリプションから取得し、6時間ごとにサブスクリプションからDBへのフィードを保存したいと思います。このタスクを実行するために、バックグラウンドでタイマースレッドを使用したいと思います。
最善の方法は何ですか?通常のタイマースレッドまたはQuartzAPI?
まず、これにはJSPを使用しません。ありません。
Java EE 5を使用している場合は、コンテナが提供するジョブスケジューリングAPIを使用してください。詳細は使用しているコンテナによって異なります。たとえば、JBoss AS5にはQuartzが同梱されています。 。または、 Spring などのジョブスケジューリングAPIを提供するJSP /サーブレット上でフレームワークを使用している場合は、それを使用する必要があります。
何もない場合(Tomcat 6のみを使用している場合など)、またはコンテナーやフレームワークから独立させたい場合は、 ServletContextListener
を作成します。 ScheduledExecutorService
。詳細については、 この回答 をご覧ください。
または、EJB3.1をサポートするJava EE 6コンテナ(JBoss AS 6、GlassFish 3、したがってnotTomcat 7)を既に使用している場合)、最も簡単なのは、 _@Singleton
_ メソッドを使用して _@Schedule
_ EJBを作成することです。
_@Singleton
public class UpdateSubscriptions {
@Schedule(hour="*/6", minute="0", second="0", persistent=false)
public void run() {
// Do your job here.
}
}
_
それでおしまい。これ以上の構成は必要ありません。
Update:コメントによると、Tomcat(6または7?)を使用しています。 6時間ごとにタスクを実行するwebappの起動中にスレッドを開始するには、 beforelinked answer に示されている例を使用し、 scheduleAtFixedRate()
メソッド
_scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS);
_
クラスUpdateSubscriptions
は Runnable
を実装する必要があり、実際のジョブは run()
で実行する必要があります。 リンクされた回答の例のように _@Override
_ 。