【发布时间】:2016-08-24 15:40:35
【问题描述】:
我正在使用 spring 批处理集成来轮询文件并对其进行处理,并且正在寻找有关它的作业参数方面的一些指导。我正在使用以下内容创建作业启动请求并将文件转换为请求
@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 中创建 2 个参数:fileParameterName 和 time。如果我再次启动应用程序,它将使用参数 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}]
我的问题是为什么在这个启动时它会查看之前的参数?有没有办法在启动时将当前时间添加为参数而不是以前的时间,所以我没有得到“作业实例已经存在并且参数={} 已完成”?或者停止在启动时运行的作业?
此外,如果应用程序正在运行并且我添加了一个文件,它将进入 toRequest 方法,但它不会在启动时。
任何帮助都会很棒。 谢谢
【问题讨论】:
标签: spring spring-integration spring-batch