在通过JUnit运行时执行Spring Batch作业增量

时间:2012-12-17 21:56:27

标签: java spring batch-processing spring-batch

我有一个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集合中添加一些东西似乎不是故障单。

有没有人知道JUnit相当于将-next传递给CommandLineJobRunner

注意:我认为问题是我的增量器被忽略,因为:

  1. 该作业是第一次运行,如果我清除作业存储库数据库,它就可以工作。它只能在重试时失败。
  2. 当我对变量进行硬编码并完全删除参数时,工作正常,重试以及所有工作。

1 个答案:

答案 0 :(得分: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);