1

我有一个带有参数的 Spring Batch 作业,并且每次运行作业时参数通常都是相同的。默认情况下,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 回答