-
02. Hello Spring Batch ProjectBackEnd/Spring Batch 2021. 12. 11. 09:28반응형
Overview
해당 글에서는 간단한 스프링 배치 프로젝트를 생성하여 구조를 확인해 보겠습니다. 전체 소스코드는 https://github.com/HanseomKim/springbatch/tree/master/src/main/java/com/spring/springbatch 참고하시면 됩니다.
1. 프로젝트 생성
https://start.spring.io/ 에서 프로젝트를 생성합니다. [GENERATE]
의존성으로는 Spring Batch, Lombok, H2 Database을 추가합니다. 다운로드 받은 폴더를 압축 해제하고 작업 폴더로 옮긴 후 IntelliJ에서 File > Open > 다운로드받은폴더\pom.xml을 열면 됩니다.
의존성으로 H2 Databse를 추가하지 않으면 초기화 시 Failed to determine a suitable driver class 원인으로 아래와 같이 애플리케이션이 실행되지 않습니다.
2. @EnableBatchProcessing
스프링 배치가 작동하기 위해 메인 함수가 있는 파일에 @EnableBatchProcessing 어노테이션을 선언합니다. @EnableBatchProcessing는 총 4개의 설정 클래스를 실행시키며 스프링 배치의 모든 초기화 및 실행을 구성합니다. 스프링 부트 배치의 자동 설정 클래스가 실행됨으로 빈으로 등록된 모든 Job을 검색해서 초기화와 동시에 Job을 수행하도록 구성됩니다.
package com.spring.springbatch; import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableBatchProcessing public class SpringbatchApplication { public static void main(String[] args) { SpringApplication.run(SpringbatchApplication.class, args); } }
3. HelloJobConfiguration
helloJob이 구동되면 helloStepStart이 실행되고 helloStepNext가 실행되는 구조입니다. 코드에 대한 설명은 주석을 참고하시면 됩니다.
package com.spring.springbatch; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @RequiredArgsConstructor // @NonNull이나 final이 붙은 필드에 대해 생성자를 생성합니다. (의존성 주입) @Configuration // 하나의 배치 Job을 정의하고 빈을 설정합니다. public class HelloJobConfiguration { private final JobBuilderFactory jobBuilderFactory; // Job을 생성하는 빌더 팩토리입니다. private final StepBuilderFactory stepBuilderFactory; // Step을 생성하는 빌더 팩토리입니다. @Bean public Job helloJob() { return jobBuilderFactory.get("helloJob") // helloJob 이름으로 Job을 생성합니다. .start(helloStepStart()) .next(helloStepNext()) .build(); } @Bean public Step helloStepStart() { return stepBuilderFactory.get("helloStepStart") // helloStep 이름으로 Step을 생성합니다. // Step안에서 단일 태스크로 수행되는 로직을 구현합니다. // return RepeatStatus.FINISHED or null: 1회만 수행합니다. 기본적으로 무한 반복입니다. .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { // Business Logic System.out.println("Hello Spring Batch !!"); return RepeatStatus.FINISHED; } }) .build(); } @Bean public Step helloStepNext() { return stepBuilderFactory.get("helloStepNext") .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { // Business Logic System.out.println("Next step !!"); return RepeatStatus.FINISHED; } }) .build(); } }
수행결과는 아래와 같습니다.
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.5.7) 2021-12-11 09:09:47.184 INFO 14272 --- [ main] c.s.springbatch.SpringbatchApplication : Starting SpringbatchApplication using Java 16.0.1 on DESKTOP-BVP40EV with PID 14272 (C:\workspace\springbatch\springbatch\target\classes started by LG in C:\workspace\springbatch\springbatch) 2021-12-11 09:09:47.187 INFO 14272 --- [ main] c.s.springbatch.SpringbatchApplication : No active profile set, falling back to default profiles: default 2021-12-11 09:09:48.716 INFO 14272 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2021-12-11 09:09:48.960 INFO 14272 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2021-12-11 09:09:49.138 INFO 14272 --- [ main] o.s.b.c.r.s.JobRepositoryFactoryBean : No database type set, using meta data indicating: H2 2021-12-11 09:09:49.407 INFO 14272 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : No TaskExecutor has been set, defaulting to synchronous executor. 2021-12-11 09:09:49.533 INFO 14272 --- [ main] c.s.springbatch.SpringbatchApplication : Started SpringbatchApplication in 3.362 seconds (JVM running for 4.487) 2021-12-11 09:09:49.535 INFO 14272 --- [ main] o.s.b.a.b.JobLauncherApplicationRunner : Running default command line with: [] 2021-12-11 09:09:49.617 INFO 14272 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=helloJob]] launched with the following parameters: [{}] 2021-12-11 09:09:49.670 INFO 14272 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [helloStepStart] Hello Spring Batch !! 2021-12-11 09:09:49.688 INFO 14272 --- [ main] o.s.batch.core.step.AbstractStep : Step: [helloStepStart] executed in 17ms 2021-12-11 09:09:49.695 INFO 14272 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [helloStepNext] Next step !! 2021-12-11 09:09:49.700 INFO 14272 --- [ main] o.s.batch.core.step.AbstractStep : Step: [helloStepNext] executed in 4ms 2021-12-11 09:09:49.704 INFO 14272 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=helloJob]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 48ms 2021-12-11 09:09:49.708 INFO 14272 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2021-12-11 09:09:49.711 INFO 14272 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. Process finished with exit code 0
[참고자료]
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard
반응형'BackEnd > Spring Batch' 카테고리의 다른 글
06. Job (0) 2021.12.16 05. 스프링 배치 초기화 설정 (0) 2021.12.16 04. 도메인 언어(Domain Language) (0) 2021.12.15 03. 메타데이터 스키마(Meta-Data Schema) (0) 2021.12.11 01. Spring Batch (0) 2021.12.07