1つのサーバーインスタンスでのみバッチをアクティブ化する

batmaniac

2つのTomcatインスタンスの前にnginxロードバランサーがあり、それぞれにSpringBootアプリケーションが含まれています。各SpringBootアプリケーションは、データベースにデータを書き込むバッチを実行します。バッチは毎日午前1時に実行されます。問題は、両方のインスタンスがバッチを同時に実行することですが、これは望ましくありません。

バッチを2つのインスタンスにデプロイしたままにして、tomcatまたはnginxにマスターサーバーでバッチを開始するように指示する方法はありますか(スレーブサーバーはバッチを実行しません)。

サーバーの1つが停止した場合、2番目のサーバーが彼に代わってバッチを開始できます。

それを行うためのツールがnginxまたはtomcat(または他のテクノロジー)にありますか?

前もって感謝します。

シャンカーPS

これは単純な設計アプローチです。

2つのVMで同時にトリガーされる2つのスケジュールされたメソッドがあるため、両方にランダムな遅延を追加します。この回答には、ランダムな期間トリガーを遅らせる方法に関する多くのオプションがあります。Spring @ Scheduledアノテーションのランダム遅延

メソッド内では、(他のVMによって)まだ開始されていない場合にのみジョブを実行します。これは、これを追跡するための新しいテーブルを使用して実行できます。

この設計の擬似コードは次のとおりです。

@Scheduled(cron = "schedule expression")
public void batchUpdateMethod() {
     //Check database for signs of job running now.
     if (job is not running){
         //update database table to indicate job is running
         //Run the batch job
         //update database table to indicate job is finished
     }
}

2つのVMは互いに独立しているため、データベースまたは一般的なファイルの場所を2つの実行間で同期するためのロックとして使用する必要があります。

より堅牢な設計については、Spring Batchを検討してください。SpringBatchは、ジョブにデータベース(JobsRepository)を使用します。デフォルトでは、実行中のジョブとそのステータスを追跡するために、メモリ内のデータソースが使用されます。セットアップでは、2つのインスタンスは(ほとんどの場合)独自のインメモリデータベースを使用しています。jobsRepositoryデータベースが共有されている場合、Spring Batchの複数のインスタンスはクラスターとして相互に調整でき、一方はジョブを実行でき、もう一方はactasaバックアップを実行できます。このためには、共通のデータソースを使用するように2つのインスタンスを構成する必要があります。

ここにいくつかのドキュメントがあります:https//docs.spring.io/spring-batch/docs/current/reference/html/index-single.html#jobrepository

https://docs.spring.io/spring-batch/docs/current/reference/html/job.html#configuringJobRepository

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

1つのアクティビティで、1つのインターフェイスを2つ以上のバックグラウンドAndroidタスクに使用するにはどうすればよいですか?

分類Dev

Angular Unit Test:サービススタブメソッドサブスクリプション内のアクティビティをカバーする方法

分類Dev

ディサイダーで春のバッチジョブパラメーターにアクセスする

分類Dev

アクティブ/スタンバイでクラスター化されたPODを使用するKubernetesサービス

分類Dev

異なるバージョンのフィクスチャで1つのテストを実行する

分類Dev

1つのサーバーにメールとウェブホスティングをインストールするのは賢明ですか?

分類Dev

リンクサーバーなしで1つのインスタンスで2つのデータベースの2つのテーブル間の関係を作成する方法

分類Dev

Infinispan:組み込みキャッシュとスタンドアロンサーバーを1つのクラスターに組み合わせる方法は?

分類Dev

非表示のステータスバーを受信する/サービスで全画面アクティビティイベントに入る

分類Dev

別のクラスのメンバーとしてのみインスタンス化できるが、VB.NETでこれを介してパブリックにアクセスできるクラスを作成することは可能ですか?

分類Dev

mlr3のインジケーター列とバッチトレイン予測に従ってタスクをサブセット化する方法は?

分類Dev

「サーバー」のインストール後にグラフィカルブートをアクティブ化する

分類Dev

Scalaでプレイ:すべてのアクティブなセッションをトラバースする

分類Dev

DB2バージョン9.7でクラスター化インデックスのないテーブルを持つことは可能ですか?

分類Dev

DB2バージョン9.7でクラスター化インデックスのないテーブルを持つことは可能ですか?

分類Dev

各反復で1つのクラスのみからバッチをサンプリングする方法

分類Dev

ng-repeatテーブル内のチェックボックス選択をフィルターでバインドする

分類Dev

C ++-1つのサーバースレッドと1つのクライアントスレッドを同じプログラムで実行する

分類Dev

VPNサーバーを介してのみインターネットアクセスを許可する

分類Dev

EUCALYPTUSアマゾンawsクラウドサーバーで1つのボリュームを複数のインスタンスに接続する方法

分類Dev

2つの異なるVertxインスタンスの下で2つのバーティクル間を通過するメッセージ。出来ますか?

分類Dev

エラーFS0722を返す複数ケースのパラメーター化されたアクティブパターン引数を受け入れることができるのは、1つの結果のみを返すアクティブパターンのみです。

分類Dev

mongodbリアクティブストリームのサブスクライバーインスタンス

分類Dev

サードパーティライブラリからのコールバックでタスクをキャンセルする

分類Dev

サーバークライアントアプリケーションでフラックスアーキテクチャパターンを使用する

分類Dev

リリースバージョンでサードパーティライブラリをアタッチする方法

分類Dev

1つのサーバーでのみAnsibleタスクを実行する-AWS

分類Dev

アプリケーションの特定のアクティビティでステータスバーと通知バーをロックする方法

分類Dev

1つのジョブのみのポータブルバッチシステムロードバランサー出力

Related 関連記事

  1. 1

    1つのアクティビティで、1つのインターフェイスを2つ以上のバックグラウンドAndroidタスクに使用するにはどうすればよいですか?

  2. 2

    Angular Unit Test:サービススタブメソッドサブスクリプション内のアクティビティをカバーする方法

  3. 3

    ディサイダーで春のバッチジョブパラメーターにアクセスする

  4. 4

    アクティブ/スタンバイでクラスター化されたPODを使用するKubernetesサービス

  5. 5

    異なるバージョンのフィクスチャで1つのテストを実行する

  6. 6

    1つのサーバーにメールとウェブホスティングをインストールするのは賢明ですか?

  7. 7

    リンクサーバーなしで1つのインスタンスで2つのデータベースの2つのテーブル間の関係を作成する方法

  8. 8

    Infinispan:組み込みキャッシュとスタンドアロンサーバーを1つのクラスターに組み合わせる方法は?

  9. 9

    非表示のステータスバーを受信する/サービスで全画面アクティビティイベントに入る

  10. 10

    別のクラスのメンバーとしてのみインスタンス化できるが、VB.NETでこれを介してパブリックにアクセスできるクラスを作成することは可能ですか?

  11. 11

    mlr3のインジケーター列とバッチトレイン予測に従ってタスクをサブセット化する方法は?

  12. 12

    「サーバー」のインストール後にグラフィカルブートをアクティブ化する

  13. 13

    Scalaでプレイ:すべてのアクティブなセッションをトラバースする

  14. 14

    DB2バージョン9.7でクラスター化インデックスのないテーブルを持つことは可能ですか?

  15. 15

    DB2バージョン9.7でクラスター化インデックスのないテーブルを持つことは可能ですか?

  16. 16

    各反復で1つのクラスのみからバッチをサンプリングする方法

  17. 17

    ng-repeatテーブル内のチェックボックス選択をフィルターでバインドする

  18. 18

    C ++-1つのサーバースレッドと1つのクライアントスレッドを同じプログラムで実行する

  19. 19

    VPNサーバーを介してのみインターネットアクセスを許可する

  20. 20

    EUCALYPTUSアマゾンawsクラウドサーバーで1つのボリュームを複数のインスタンスに接続する方法

  21. 21

    2つの異なるVertxインスタンスの下で2つのバーティクル間を通過するメッセージ。出来ますか?

  22. 22

    エラーFS0722を返す複数ケースのパラメーター化されたアクティブパターン引数を受け入れることができるのは、1つの結果のみを返すアクティブパターンのみです。

  23. 23

    mongodbリアクティブストリームのサブスクライバーインスタンス

  24. 24

    サードパーティライブラリからのコールバックでタスクをキャンセルする

  25. 25

    サーバークライアントアプリケーションでフラックスアーキテクチャパターンを使用する

  26. 26

    リリースバージョンでサードパーティライブラリをアタッチする方法

  27. 27

    1つのサーバーでのみAnsibleタスクを実行する-AWS

  28. 28

    アプリケーションの特定のアクティビティでステータスバーと通知バーをロックする方法

  29. 29

    1つのジョブのみのポータブルバッチシステムロードバランサー出力

ホットタグ

アーカイブ