Study/스프링배치 완벽 가이드
Day 3. 잡과 스텝 이해하기
주지민
2021. 11. 6. 22:14
반응형
스프링 배치 완벽 가이드 내용 정리입니다
3장. 예제 잡 어플리케이션은 스킵했습니다
http://www.yes24.com/Product/Goods/99422216
1. 잡 소개하기
- 잡은 처음부터 끝까지 독립적으로 실행할 수 있으며, 고유하고 순서가 지정된 여러 스텝의 목록이라고 정의할 수 있다
- 특징
- 유일하다 => 같은 잡을 통해서 동일한 구성을 필요한 만큼 실행할 수 있다
- 순서를 가진 여러 스텝의 목록 => 모든 스텝을 논리적인 순서대로 실행할 수 있도록 구성되어있다
- 처음부터 끝까지 실행 가능
- 독립적이다 => 각 배치 잡은 외부 의존성의 영향을 받지 않고 실행할 수 있어야 한다
- 잡의 생명주기
- 잡의 실행은 Job Runner에서 시작된다
- 잡 이름과 여러 파라미터를 받아들여 잡을 실행시키는 역할
- 종류는 두가지가 있다 ( org.springframework.batch.core.launch.support )
- CommandLineJobRunner
- 스크립트 혹은 명령행에서 직접 잡을 실행시킬 때 사용
- 스프링을 부트스트랩하고, 전달받은 파라미터를 사용해 요청된 잡을 실행
- 별도의 구성이 없다면 기본적으로 ApplicationContext에 정의된 Job 타입의 모든 빈을 기동시에 실행한다
- JobRegistryBackgroundJobRunner
- JobRegistry를 생성하는 데 사용한다
- 쿼츠나 JMX 후크와 같은 스케줄러를 사용해 Job을 실행하면, 스프링이 부트스트랩될 때 실행 가능한 잡을 가지고 있는 JobRegistry를 생성하게 된다
- 스프링 배치는 org.springframework.batch.core.launch.support.SimpleJobLauncher라는 단일 JobLauncher만 제공한다
- 코어 스프링의 Task Executor 인터페이스를 이용해 요청된 잡을 수행
- org.springframework.core.task.TaskExecutor를 구성하는 방법에는 여러가지가 있다
- 대표적으로 SyncTaskExecutor를 사용한다면 JobLauncher와 동일한 스레드에서 잡이 실행된다
- 배치 잡이 실행되면 JobInstance가 생성된다
- 잡의 논리적 실행을 나타낸다
- JobName + JobParameters ( 실행시에 사용되는 파라미터 ) 조합으로 식별된다
- 성공적으로 완료된 JobExecution이 있다면 완료된 것으로 간주
- 잡의 실행은 Job Runner에서 시작된다
2. 기본 잡 구성해보기
- 로컬 MySQL 스키마 생성
// mysql -u "..." -p 접속 CREATE SCHEME `spring_batch_guide` DEFAULT CHARACTER SET utf8;
- 프로퍼티 구성
// application.yml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/spring_batch_guide username: {username} password: {password} batch: jdbc: initialize-schema: always
- 로컬로 실행된 mysql과 연결했다
- spring.batch.jdbc.initialize-schema
- 데이터베이스에 배치 스키마가 존재하지 않는다면 자동으로 배치 스키마를 생성하도록 설정
- always, embedded, none 세 가지 타입이 있다
- 이렇게 설정되면 스프링 부트는 항상 배치 스키마를 생성하려고 시도한다, 만약 이미 스키마가 존재한다면 해당 시도가 실패하게 되지만 기본 설정에 따라 해당 실패는 무시되고 이후 과정이 문제없이 진행된다
- HelloWorld Job 구성
// HelloWorldJobConfiguration @RequiredArgsConstructor @EnableBatchProcessing @Configuration public class HelloWorldJobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean public Job helloWorldJob() { return this.jobBuilderFactory.get("helloWorldJob") .start(helloWorldStep()) .build(); } @Bean public Step helloWorldStep() { return this.stepBuilderFactory.get("helloWorldStep") .tasklet((contribution, chunkContext) -> { System.out.println("Hello, World!"); return RepeatStatus.FINISHED; }) .build(); } }
- @EnableBatchProcessing
- 전에 설명한 대로 어플리케이션내에서 한번만 적용되며 배치 어플리케이션 구성에 필요한 각종 빈들을 정의하여 제공한다
- JobBuilderFactory
- 스프링 배치 잡을 구성하고 생성하는데 사용된다
- get() 메서드에 Job 이름을 전달하면 JobBuilder를 얻을 수 있으며, 이를 통해 Job을 구성할 수 있다
- StepBulderFactory
- 스텝 빈을 정의하는데 사용
- JobBuilderFactory와 마찬가지로 get() 메서드에 Step 이름을 전달하면 StepBuilder가 반환되며 해당 빌더를 통해 Step을 구성할 수 있다
- Tasklet을 구현하므로 동작을 정의할 수 있다
- @EnableBatchProcessing
728x90
반응형