programing

스프링 부트를 사용하여 스프링 배치에서 작업 매개 변수를 설정하는 방법

stoneblock 2023. 3. 10. 21:02

스프링 부트를 사용하여 스프링 배치에서 작업 매개 변수를 설정하는 방법

http://spring.io/guides/gs/batch-processing/에 있는 가이드에서 확인했는데 설정 가능한 파라미터가 없는 작업이 설명되어 있습니다.난 메이븐을 이용해서 내 프로젝트를 만들고 있어.

XML에서 정의한 기존 작업을 포팅하고 있으며 명령을 통해 jobParameters를 전달하려고 합니다.

다음을 시도했습니다.

@Configuration
@EnableBatchProcessing
public class MyBatchConfiguration {

    // other beans ommited

    @Bean 
    public Resource destFile(@Value("#{jobParameters[dest]}") String dest) {
        return new FileSystemResource(dest);
    }

}

그런 다음 다음을 사용하여 프로젝트를 컴파일합니다.

mvn clean package

그런 다음 다음과 같이 프로그램을 실행하려고 합니다.

java my-jarfile.jar dest=/tmp/foo

그리고 예외는 다음과 같습니다.

[...]
Caused by: org.springframework.expression.spel.SpelEvaluationException: 
EL1008E:(pos 0): Field or property 'jobParameters' cannot be found on object of 
type 'org.springframework.beans.factory.config.BeanExpressionContext'

감사합니다!

명령줄에서 작업 매개 변수를 구문 분석한 다음 작업 매개 변수를 생성하고 채웁니다.

public JobParameters getJobParameters() {
    JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
    jobParametersBuilder.addString("dest", <dest_from_cmd_line);
    jobParametersBuilder.addDate("date", <date_from_cmd_line>);
    return jobParametersBuilder.toJobParameters();
}

Job Launcher를 통해 업무에 전달 -

JobLauncher jobLauncher = context.getBean(JobLauncher.class);
JobExecution jobExecution = jobLauncher.run(job, jobParameters);

이제 다음과 같은 코드를 사용하여 액세스할 수 있습니다.

@Bean 
@StepScope
public Resource destFile(@Value("#{jobParameters[dest]}") String dest) {
    return new FileSystemResource(dest);
}

또는 ItemReader, ItemWriter 등의 Spring Batch Job 아티팩트를 설정하는 @Configuration 클래스에서 사용할 수도 있습니다.

@Bean
@StepScope
public JdbcCursorItemReader<MyPojo> reader(@Value("#{jobParameters}") Map jobParameters) {
    return new MyReaderHelper.getReader(jobParameters);
}

저는 제 콩에 주석을 다는 것만으로 이 작업을 할 수 있었습니다.

@Bean 
@StepScope
public Resource destFile(@Value("#{jobParameters[dest]}") String dest) {
    return new FileSystemResource(dest);
}

언급URL : https://stackoverflow.com/questions/21557623/how-do-i-set-jobparameters-in-spring-batch-with-spring-boot