0


Tomcat の単一インスタンスでは、コンテキストが初期化されたときに開始されたスレッドがあります。このようなもの :

public class MyContextListener implements ServletContextListener {
private MyThread thread = null;

@Override
public void contextInitialized(ServletContextEvent sce) {
    //Start thread...
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
    //Stop thread...
}
}

このスレッドは、システムで 10 分ごとにいくつかの重要なジョブを実行し、正常に機能していました。

今、私は tomcat のクラスターのインスタンスに切り替えました。このスレッドは 2 つのインスタンスで実行されています。私はさまざまな行動を達成しようとしています。

私が達成しようとしていること:

  • このスレッドは、一度に 1 つのインスタンスでのみ実行する必要があります。
  • 最初のインスタンス (スレッドが実行されていた) が失敗した場合、スレッドは 2 番目のインスタンスで開始する必要があります。

ヒントをいただければ幸いです。

私のアプリケーションロジックは何ですか?
スレッドによって実行されるアプリケーション ロジックは次のとおりです。

  1. DB から sth を読み取ります。
  2. DB情報を分析します。
  3. 必要に応じて、外部システムに HTTP リクエストを送信します。
  4. スレッドをさらに 10 分間スリープさせます。

要点: tomcat のインスタンスが 2 つある場合、このロジックを実行するのは 1 つだけです。

4

1 に答える 1

0

私の理解が正しければ、web-application-server を使用している場合、アプリケーションで新しいスレッドを開始することは実際には許可されていません。すべてのスレッドは、アプリケーション サーバーによって管理される必要があります。

于 2012-06-29T09:50:11.080 に答える