1

パラメーターを受け取るSpringBatchジョブがあり、パラメーターは通常、ジョブが実行されるたびに同じです。デフォルトでは、Spring Batchではそのような同じパラメーターを再利用できません...そこで、単純なインクリメントを作成して、次のようにジョブに追加しました。

http://numberformat.wordpress.com/2010/02/07/multiple-batch-runs-with-spring-batch/

標準CommandLineJobRunnerを使用してジョブを実行-nextする場合、インクリメントを使用するにはパラメーターを渡す必要があります。

ただし、JUnitクラス内からエンドツーエンドのジョブテストを実行すると、JobLauncherTestUtils.launchJob( JobParameters )...を使用して、インクリメントを使用する必要があることを宣言する方法が見つかりません。おそらく、これらのパラメーターを使用して既に実行されているため、ジョブは静かにスキップされます(以下の注を参照)。

このJobParametersクラスは、名前と値のペアのコレクションを保持することを目的としています...ただし、-nextパラメーターは異なります。ダッシュで始まり、対応する値はありません。いろいろな実験をしてみましたが、コレクションに何かを追加しようとするJobParametersのはチケットではないようです。

-nextに渡すのと同等のJUnitを知っている人はいますCommandLineJobRunnerか?

注:問題は、インクリメントが無視されていることだと思います。理由は次のとおりです。

  1. ジョブは最初に機能し、ジョブリポジトリデータベースを消去すると機能します。再試行でのみ失敗します。
  2. 変数をハードコーディングしてパラメーターを完全に削除すると、ジョブは正常に機能し、再試行します。
4

1 に答える 1

1

JobLauncherTestUtilsクラスには、まったく同じニーズに対応するgetUniqueJobParametersメソッドが含まれています。

/**
* @return a new JobParameters object containing only a parameter for the
* current timestamp, to ensure that the job instance will be unique.
*/
public JobParameters getUniqueJobParameters() {Map<String, JobParameter> 
parameters = new HashMap<String, JobParameter>();
parameters.put("random", new JobParameter((long) (Math.random() * JOB_PARAMETER_MAXIMUM)));
return new JobParameters(parameters);
}

サンプルの使用法は、

JobParameters params = new JobParametersBuilder (jobLauncherTestUtils.getUniqueJobParameters()).toJobParameters();
     //extra parameters to be added
JobExecution jobExecution = jobLauncherTestUtils.launchJob(params);
于 2012-12-18T12:47:56.033 に答える