Spring Batch Integration作业实例在启动时已存在

时间:2016-08-24 15:40:36

标签: spring spring-integration spring-batch

我正在使用spring batch integration来轮询文件并对其进行处理,并且正在寻找关于它的作业参数方面的一些指导。我正在使用以下内容创建作业启动请求并将文件转换为请求

@Transformer
public JobLaunchRequest toRequest(Message<File> message) {
    JobParametersBuilder jobParametersBuilder =
            new JobParametersBuilder();

    jobParametersBuilder.addString(fileParameterName,
            message.getPayload().getAbsolutePath());
    jobParametersBuilder.addLong("time", new Date().getTime());

    return new JobLaunchRequest(job, jobParametersBuilder.toJobParameters());
}

首次启动应用程序时,只有一个参数run.id.如果我向存储库添加文件轮询器查找文件,则会在db:fileParameterName和time中创建2个参数。如果我再次启动应用程序,它将使用参数fileParameterName和time的先前值并添加新的run.id.初始启动时的消息是:

Job: ... launched with the following parameters: [{run.id=1}]

如果我添加文件,我的应用程序正确处理文件:

Job: ... launched with the following parameters:[{input.file.name=C:\Temp\test.csv, time=1472051531556}]

但是如果我再次停止并启动应用程序,我会收到以下消息:

Job: ... launched with the following parameters: [{time=1472051531556, run.id=1, input.file.name=C:\Temp\test.csv}]

我的问题是为什么在这个启动时它会查看以前的参数?有没有办法在启动时将当前时间添加为参数,而不是之前的时间,所以我没有得到&#34;作业实例已经存在并且对于参数= {}&#34;?或者在启动时停止运行的作业?

此外,如果应用程序正在运行并且我添加了一个文件,它将进入toRequest方法,但它不会启动。

任何帮助都会很棒。 感谢

1 个答案:

答案 0 :(得分:1)

我们应该有一个参数'run.id'和'当前时间戳'到我们启动Spring Batch Job的地方。这就是我们如何从shell脚本启动Spring Batch作业。

  

RUN_ID = $(日期+“%Y-%m-%d%H:%M:%S”)JOB_PARAMS =“filename = XXX”

     

$ JAVA_HOME   org.springframework.batch.core.launch.support.CommandLineJobRunner   springbatch_XXX.xml SpringBatchJob run.id =“$ RUN_ID”$ {JOB_PARAMS}