
Spring Cloud Data Flow를 통한 Spring Stream 관리에 대해 학습했었다.
이 외에도 SCDF에서는 Batch를 Task로 관리할 수 있어 이를 테스트 해보려고 한다.
https://www.youtube.com/playlist?list=PLJkjrxxiBSFCaxkvfuZaK5FzqQWJwmTfR
Bath 프로젝트 구현에 대한 자세한 내용은 위 강의를 통해 학습하였다.
공식문서: https://dataflow.spring.io/docs/batch-developer-guides/batch/spring-batch/
공식문서의 가이드도 참조하기 좋은 내용인 것 같다.
강의를 통해 Batch라는 것의 구현 및 동작 방식을 익혔고 SCDF Task에 올릴 샘플 코드를 작성해보았다.
implementation 'org.springframework.cloud:spring-cloud-starter-task'
@EnableTask
@SpringBootApplication
public class UserDeleteBatchApplication {
public static void main(String[] args) {
SpringApplication.run(UserDeleteBatchApplication.class, args);
}
}
사실 이렇게 @EnableTask 어노테이션을 추가해주면 준비가 끝난다.
그리고 샘플 Batch 코드는 다음과 같다.
@Configuration
public class BatchConfig {
private final JobRepository jobRepository;
private final PlatformTransactionManager transactionManager;
public BatchConfig(JobRepository jobRepository,
@Qualifier("transactionManager") PlatformTransactionManager transactionManager) {
this.jobRepository = jobRepository;
this.transactionManager = transactionManager;
}
@Bean
public Job exampleJob(Step exampleStep) {
return new JobBuilder("exampleJob", jobRepository)
.start(exampleStep)
.build();
}
@Bean
public Step exampleStep(ItemReader<String> reader,
ItemProcessor<String, String> processor,
ItemWriter<String> writer) {
return new StepBuilder("exampleStep", jobRepository)
.<String, String>chunk(2, transactionManager)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
@Bean
public ItemReader<String> reader() {
return new ItemReader<>() {
private final List<String> data = List.of("Spring", "Batch", "5.0", "Example");
private int index = 0;
@Override
public String read() {
return index < data.size() ? data.get(index++) : null;
}
};
}
@Bean
public ItemProcessor<String, String> processor() {
return item -> "Processed: " + item;
}
@Bean
public ItemWriter<String> writer() {
return items -> items.forEach(System.out::println);
}
}
여기서 @Qualifier를 설정해주지 않으면 Spring Boot의 HibernateJpaConfiguration에서 정의된 기본 transactionManager와 Spring Cloud Task에서 정의된 transactionManager 중 어떤 빈을 주입해야 할지 결정하지 못해 에러가 뜬다.
그리고 @EnableBatchProcessing은 Spring Batch 5.0 버전 이후부터 명시해주지 않았을 때 자동으로 Batch 관련 설정을 해주고 명시했을 때는 일부 충돌이 생기는 문제가 있어 제거해주었다.
이제 Batch 모듈을 jar파일로 만들어 준다.
./gradlew bootjar
그리고 SCDF dashboard에서 application등록 해주고 task 등록을 해주면 끝이다.

URI에 jar 파일 경로를 입력해준다.
file 또는 maven 경로를 입력해주면 된다.

Task 등록
이후에는 대쉬보드에서 Batch 실행을 할 수 있게 된다.
CLI로 Application 등록과 Task 등록 방법, 스케줄링 방법도 찾아서 적용해봐야 한다.
현재로선 SCDF의 기초적인 기능을 학습한 수준이라 이후 샘플 기능이 아닌 실제 서비스를 위한 기능으로 만들어보고 적용해보면 좋을 것 같다.