2016-08-24 82 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將會在每次啓動工作時爲您的工作創建一個新的實例。 –

相關問題