2016-08-24 2 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:[{input.file.name=C:\Temp\test.csv, time=1472051531556}] 

을하지만 난 다시 중지하고 응용 프로그램을 시작하면 다음과 같은 메시지가 뜹니다 내가 파일을 추가하면

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

내 응용 프로그램이 파일을 제대로 처리합니다

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

제 질문은 왜이 시작에서 이전 매개 변수를 찾고 있습니까? 이전 시간 대신 시작시 매개 변수로 현재 시간을 추가하는 방법이 있습니까? "작업 인스턴스가 이미 존재하고 매개 변수 = {}"에 대해 완료되지 않았습니까? 또는 시동시 작업 실행을 중지 하시겠습니까?

또한 응용 프로그램이 실행 중이고 파일을 추가하면 toRequest 메소드가 시작되지만 시작시에는 나타나지 않습니다.

도움이 될 것입니다. 감사합니다.

답변

1

우리는 Spring batch job을 시작할 위치에 '현재 타임 스탬프'가있는 'run.id'매개 변수가 있어야합니다. 이것이 쉘 스크립트에서 Spring 배치 작업을 시작하는 방법입니다.

RUN_ID = $ (일자 + "% Y- % M- % 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

안녕, 나는 내가 그것을 구성하고있는 작업을 킥오프 쉘 스크립트를 사용하고 있지 않다 xml이며 응용 프로그램이 시작될 때 시작됩니다. – sadWal

+0

우리는 Spring Batch에 고유 한 'value'가있는 param 이름 인 'run.id'를 주어야한다는 것을 말하고 있습니다. Spring Batch에서는 작업을 시작할 때마다 작업에 대한 새로운 인스턴스를 생성합니다. –

관련 문제