[SPRING] 스프링 배치 주석을 사용하여 itemprocessor로 Job 매개 변수를 가져 오는 방법
SPRING스프링 배치 주석을 사용하여 itemprocessor로 Job 매개 변수를 가져 오는 방법
나는 봄 MVC를 사용하고있다. 내 컨트롤러에서 jobLauncher를 호출하고 jobLauncher에서 아래와 같은 작업 매개 변수를 전달하고 주석을 사용하여 구성을 활성화합니다.
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
// read, write ,process and invoke job
}
JobParameters jobParameters = new JobParametersBuilder().addString("fileName", "xxxx.txt").toJobParameters();
stasrtjob = jobLauncher.run(job, jobParameters);
and here is my itemprocessor
public class DataItemProcessor implements ItemProcessor<InputData, OutPutData> {
public OutPutData process(final InputData inputData) throws Exception {
// i want to get job Parameters here ????
}
}
해결법
-
==============================
1.1) 데이터 처리기에 스코프 주석을 넣으십시오.
1) 데이터 처리기에 스코프 주석을 넣으십시오.
@Scope(value = "step")
2) 데이터 프로세서에서 클래스 인스턴스를 만들고 값 주석을 사용하여 작업 매개 변수 값을 주입합니다.
@Value("#{jobParameters['fileName']}") private String fileName;
최종 데이터 프로세서 클래스는 다음과 같습니다.
@Scope(value = "step") public class DataItemProcessor implements ItemProcessor<InputData, OutPutData> { @Value("#{jobParameters['fileName']}") private String fileName; public OutPutData process(final InputData inputData) throws Exception { // i want to get job Parameters here ???? System.out.println("Job parameter:"+fileName); } public void setFileName(String fileName) { this.fileName = fileName; } }
데이터 프로세서가 bean으로 초기화되지 않은 경우에는 @Component 주석을 추가하십시오.
@Component("dataItemProcessor") @Scope(value = "step") public class DataItemProcessor implements ItemProcessor<InputData, OutPutData> {
-
==============================
2.Spring의 hacky expression language (SpEL) 사용을 피하는 더 나은 해결책은 @BeforeStep을 사용하여 StepExecution 컨텍스트를 프로세서에 자동으로 연결하는 것입니다.
Spring의 hacky expression language (SpEL) 사용을 피하는 더 나은 해결책은 @BeforeStep을 사용하여 StepExecution 컨텍스트를 프로세서에 자동으로 연결하는 것입니다.
프로세서에 다음과 같이 추가하십시오.
@BeforeStep public void beforeStep(final StepExecution stepExecution) { JobParameters jobParameters = stepExecution.getJobParameters(); // Do stuff with job parameters, e.g. set class-scoped variables, etc. }
@BeforeStep 주석
from https://stackoverflow.com/questions/31737209/how-to-get-job-parameteres-in-to-item-processor-using-spring-batch-annotation by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 두 개의 고정 컨테이너 사이의 통신 문제 (0) | 2019.04.01 |
---|---|
[SPRING] 스프링 보안, 폼 로그인 및 동시 세션 (0) | 2019.03.31 |
[SPRING] Spring MappingJacksonJsonView, JSP 뷰 대신 사용하는 법을 가르쳐주세요. (0) | 2019.03.31 |
[SPRING] Jackson2ObjectMapperBuilder를 사용하여 필드 가시성 ANY (0) | 2019.03.31 |
[SPRING] org.hibernate.LazyInitializationException : 프록시를 초기화 할 수 없습니다 - 세션이 없습니까? (0) | 2019.03.31 |