実行中のジョブのBatchStatusをポーリングする方法は?

user3540722

アイテムのリストに対して繰り返す必要のあるバッチジョブがあります。したがって、バッチレットステップを使用してリストをロードし、リスト内の各IDの子ジョブを開始する「親」ジョブがあります。各子ジョブはJobOperator使用して起動され、paramはPropertiesクラスを使用して起動されます。これは期待どおりに正常に機能ます

リストを反復処理するには、バッチステータスを取得し、子ジョブが完了するのを待つ必要があります。JobExecutionクラスを使用してバッチステータスまたは終了ステータスを取得しようとしていますが、JobExecutionは子ジョブのバッチステータスを取得していません。

代わりに、STARTED子ジョブが完了した後でも、常にのバッチステータスが表示されます。

私のコードは次のようになります:

for (int i = 1; i <= rsList; i++) {
            long execId = jobOperator.start("gah-history-chunk-archive-job",jobParamProperties);
            JobInstance jobInstance = jobOperator.getJobInstance(execId);
            JobExecution jobExecution = jobOperator.getJobExecution(execId);
            logger.info("Instance id: "+jobInstance.getInstanceId());
            while(!jobExecution.getBatchStatus().toString().equals("COMPLETED") || !jobExecution.getBatchStatus().toString().equals("FAILED")) {
                //Both batch status and exit status giving the status of this batchlet, not giving the status of gah-history-chunk-archive-job
logger.info("Batch status is: "+jobExecution.getBatchStatus() +" Thread is sleeping for 5 seconds");
                logger.info("Exit status:"+jobExecution.getExitStatus());

                Thread.sleep(300);
            }
        }

バッチレットから起動された子ジョブのバッチまたは終了ステータスを取得する方法を知りたい。なぜBatchStatusが表示され続けるのSTARTEDですか?

スコットショート

ステータスを「ポーリング」するには、ステータスJobExecutionを確認するたびにJobOperatorから新しいインスタンスを取得する必要があります。したがって、JobExecutionwhileループの外側ではなく、内側に取得します。

したがって、たとえば次のようになります。

do {
  Thread.sleep(300);

  // log or whatever

  BatchStatus status = jobOperator.getJobExecution(execId).getBatchStatus();

}  while(status != BatchStatus.COMPLETED && status != BatchStatus.FAILED) ;

ここでの動作は仕様によって標準化されていないため、これは少し注意が必要です。
この仕様では、さまざまなジョブリポジトリの実装(データベース、単純なメモリ内マップなど)が許可されているため、「キャッシュされた」JobExecutionに特定の動作を必要とせず、「元のコードで動作する場合があります。

実際に表示されているのは、返される「親」オブジェクトインスタンスではないと思います。期待したものが見えないので混乱しているのではないかと思います。

いずれにせよ、コードの移植性を高めるためにJobExecution、各ステータスチェックでを取得してください。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

ジョブの実行中にJenkinsは「SCMポーリング」を実行しますか?

分類Dev

実行中のスプリング・ブートアプリケーションへのJavaエージェントを接続する方法

分類Dev

レポートサーバーサブスクリプションSQLエージェントのジョブ名を実行中のレポートの名前にリンクする方法

分類Dev

現在実行中のcronジョブを表示する方法は?

分類Dev

intellijコミュニティエディションリポジトリから既存のプラグインをインポートして実行する方法

分類Dev

実行中のTomcatバージョンを確認する方法

分類Dev

Jenkins Groovy-特定のジョブの実行中のすべてのビルドのparamsグローバル変数を取得する方法は?

分類Dev

アプリの起動時に実行するcronジョブをスケジュールする方法は?

分類Dev

長時間実行されたジョブの後にコンポーネントをレンダリングする

分類Dev

GitLab CIで、1つのジョブのリポジトリクローンを無効にする方法は?

分類Dev

嵐の中で死んだジョブログをクリーンアップする方法は?

分類Dev

多くのジョブを並行して実行すると、Kubernetesジョブステータスの更新が遅れる-適切なk8sコンポーネントをスケーリングするにはどうすればよいですか?

分類Dev

Linuxで複数のバックグラウンドジョブを実行する方法は?

分類Dev

'debug'Firebaseデータベースでデバッグアプリのバージョンを実行する方法

分類Dev

lollipopで `getTopActivity`名を取得する方法、または現在実行中のアプリケーションパッケージ名を取得する方法は?

分類Dev

ジョブのレスキュー、ジョブの実行を停止する方法

分類Dev

MongoDBアグリゲーション-単一のクエリで複数の操作を実行する方法は?

分類Dev

githubアクションで別のリポジトリのサービスとしてnode.jsgithubリポジトリを実行する方法

分類Dev

SwiftとXcode:iOSアプリケーションのGitHubリポジトリを構築して実行する方法は?

分類Dev

バックグラウンドジョブの解析をローカルで実行する方法

分類Dev

ポストホックテスト、アグリコラパッケージのTukeyを実行する方法は?

分類Dev

iOSバージョンの特定のデリゲートを実行する方法は?

分類Dev

パイプラインから複数のノードでJenkinsジョブをトリガーする方法(1つのジョブのみを実行)

分類Dev

アプリケーションからランタイム/実行中の.NETFrameworkバージョンを検出する方法は?

分類Dev

Javaコンソールアプリケーションからのページングで「少ない」を実行する方法は?

分類Dev

Windows 10でswingアプリの複数の実行中のバージョンを閉じるための最良の方法は何ですか?

分類Dev

使用中のGuavaのバージョンを実行時に取得する方法はありますか?

分類Dev

ポンポンでしかし春のブートアプリケーションを実行するときに互換性のあるバージョンの問題を取得する唯一のバージョンが存在します

分類Dev

DUB:gitリポジトリのバージョンを指定する方法は?

Related 関連記事

  1. 1

    ジョブの実行中にJenkinsは「SCMポーリング」を実行しますか?

  2. 2

    実行中のスプリング・ブートアプリケーションへのJavaエージェントを接続する方法

  3. 3

    レポートサーバーサブスクリプションSQLエージェントのジョブ名を実行中のレポートの名前にリンクする方法

  4. 4

    現在実行中のcronジョブを表示する方法は?

  5. 5

    intellijコミュニティエディションリポジトリから既存のプラグインをインポートして実行する方法

  6. 6

    実行中のTomcatバージョンを確認する方法

  7. 7

    Jenkins Groovy-特定のジョブの実行中のすべてのビルドのparamsグローバル変数を取得する方法は?

  8. 8

    アプリの起動時に実行するcronジョブをスケジュールする方法は?

  9. 9

    長時間実行されたジョブの後にコンポーネントをレンダリングする

  10. 10

    GitLab CIで、1つのジョブのリポジトリクローンを無効にする方法は?

  11. 11

    嵐の中で死んだジョブログをクリーンアップする方法は?

  12. 12

    多くのジョブを並行して実行すると、Kubernetesジョブステータスの更新が遅れる-適切なk8sコンポーネントをスケーリングするにはどうすればよいですか?

  13. 13

    Linuxで複数のバックグラウンドジョブを実行する方法は?

  14. 14

    'debug'Firebaseデータベースでデバッグアプリのバージョンを実行する方法

  15. 15

    lollipopで `getTopActivity`名を取得する方法、または現在実行中のアプリケーションパッケージ名を取得する方法は?

  16. 16

    ジョブのレスキュー、ジョブの実行を停止する方法

  17. 17

    MongoDBアグリゲーション-単一のクエリで複数の操作を実行する方法は?

  18. 18

    githubアクションで別のリポジトリのサービスとしてnode.jsgithubリポジトリを実行する方法

  19. 19

    SwiftとXcode:iOSアプリケーションのGitHubリポジトリを構築して実行する方法は?

  20. 20

    バックグラウンドジョブの解析をローカルで実行する方法

  21. 21

    ポストホックテスト、アグリコラパッケージのTukeyを実行する方法は?

  22. 22

    iOSバージョンの特定のデリゲートを実行する方法は?

  23. 23

    パイプラインから複数のノードでJenkinsジョブをトリガーする方法(1つのジョブのみを実行)

  24. 24

    アプリケーションからランタイム/実行中の.NETFrameworkバージョンを検出する方法は?

  25. 25

    Javaコンソールアプリケーションからのページングで「少ない」を実行する方法は?

  26. 26

    Windows 10でswingアプリの複数の実行中のバージョンを閉じるための最良の方法は何ですか?

  27. 27

    使用中のGuavaのバージョンを実行時に取得する方法はありますか?

  28. 28

    ポンポンでしかし春のブートアプリケーションを実行するときに互換性のあるバージョンの問題を取得する唯一のバージョンが存在します

  29. 29

    DUB:gitリポジトリのバージョンを指定する方法は?

ホットタグ

アーカイブ