[SPRING] 스프링 배치에서 x 번 반복
SPRING스프링 배치에서 x 번 반복
Spring Batch 3.0.3을 사용하여 주석을 설정하여 단계를 미확인 횟수만큼 반복하는 배치 작업을 생성합니다.
나의 첫 번째 단계는 반복 단계에서 사용 된 항목 목록을 메모리에 읽어 들일 것입니다. 이 작업 범위 목록을 반복하는 단계를 반복하고 싶습니다.
동일한 단계를 x 번 실행하도록 작업을 구성하려면 어떻게해야합니까? 나는 xml에서 다음 단계를 지정하는 예제를 보았다. 목록이 반복 될 때까지 무한 루프에서 두 단계를 서로 가리킬 수 있다고 생각합니다. 이 방법이 효과가 있으며 주석을 사용하여이를 수행 할 수 있습니까? 아래는 작동하지 않는 일부 코드가 포함 된 주요 구성 파일입니다.
@ComponentScan(excludeFilters = @Filter(IgnoreDuringScan.class))
@EnableAutoConfiguration
@EnableBatchProcessing
@Loggable
public class BatchCrudConfiguration
{
@Bean
public Job batchCRUDJob(JobBuilderFactory jobBuilderFactory, Step[] processSheetSteps)
{
JobBuilder jobBuilder = jobBuilderFactory.get("batchCRUDJob").incrementer(new RunIdIncrementer());
FlowBuilder<FlowJobBuilder> jobFlowBuilder = jobBuilder.flow(processSheetSteps[0]);
for (int i = 1; i < processSheetSteps.length; i++)
{
jobFlowBuilder = jobFlowBuilder.next(processSheetSteps[i]);
}
return jobFlowBuilder.end().build();
}
@Bean
public Step[] processSheetSteps(
StepBuilderFactory stepBuilderFactory,
RawDataReader[] readers,
DelegatingWriter writer,
DelegatingProcessor processor,
@Value("${batchcrud.chunkSize}") int chunkSize)
{
int numberOfReaders = readers.length;
Step[] steps = new Step[numberOfReaders];
for (int i = 0; i < numberOfReaders; i++)
{
steps[i] = stepBuilderFactory.get("processSheet" + i + "Step").<RawData, DataItem>
chunk(chunkSize).reader(readers[i]).processor(processor).writer(writer).build();
}
return steps;
}
해결법
-
==============================
1.이렇게 접근하는 방법은 다음과 같습니다.
이렇게 접근하는 방법은 다음과 같습니다.
예 :
StepExecutionListener
public class MyListener { @Autowired private List myItems; @AfterStep public ExitStatus afterStep(StepExecution stepExecution) { if(myItems.size() > 0) { return new ExitStatus("CONTINUE"); } else { return new ExitStatus("FINISHED"); } } }
작업 구성
... @Bean public Step step1() {...} @Bean public MyListener listener() {..} @Bean public Step step2(MyListener listener) { return stepBuilder.get("step2") .tasklet(myTasklet()) // Replace this piece as needed .listener(listener).build(); } @Bean public Job job1(Step step1, Step step2) { return jobBuilder.get("job1") .start(step1) .next(step2).on("CONTINUE").to(step2).on("FINISHED").end() .build(); } ...
참고 오타가있을 수 있으므로이 코드를 테스트하지 않았습니다.
from https://stackoverflow.com/questions/29286699/repeating-a-step-x-times-in-spring-batch by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트와 임베디드 Tomcat으로이 속성을 어떻게 구성합니까? (0) | 2019.02.09 |
---|---|
[SPRING] 리소스 파일을 찾을 수없는 봄 (CSS, JSP 등 ...) (0) | 2019.02.09 |
[SPRING] Spring-WS의 응답 페이로드에 첨부 파일을 추가하려면 어떻게해야합니까? (0) | 2019.02.09 |
[SPRING] JSR-303과 Spring Validator 클래스를 서비스 레이어에 결합하는 방법은 무엇입니까? (0) | 2019.02.09 |
[SPRING] spring-boot : 패키징에 대한 종속성 제외 (0) | 2019.02.09 |