2016-08-24 142 views
0

我正在使用弹簧批量集成轮询文件并对其进行处理,并且正在寻找关于其作业参数方面的一些指导。我使用下面的创建工作启动请求并打开一个文件到请求启动时弹簧批量集成作业实例已存在

@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}] 

我的问题是为什么在这个启动它看着以前的参数?有没有办法将当前时间添加为启动时的参数而不是之前的时间,因此我不会收到“作业实例已经存在并且已完成参数= {}”?或停止开始运行的工作?

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

任何帮助将是伟大的。 谢谢

回答

1

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

RUN_ID = $(日期+ “%Y-%间 - %d%H:%M:%S”)JOB_PARAMS = “文件名= XXX”

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

+0

嗨,我不使用shell脚本揭开序幕我在配置它的工作xml,它在应用程序启动时启动。 – sadWal

+0

我在说的是我们需要给Spring Batch一个带有唯一'值'的参数名'run.id',这样Spring Batch将会在每次启动工作时为您的工作创建一个新的实例。 –