Spring Batch를 이용한 기본적인 Batch Application

Spring Boot Batch(Maven Repository의 artifact id가 spring-boot-starter-batch)를 기준으로 작성하였음 ㅎㅎ
 

Spring Batch는 Job과 Step으로 구성되어 있다. 하나의 배치 어플리케이션 안에 여러개의 Job이 있고, 다시 하나의 Job은 여러개의 Step으로 구성되어있는 구조이다. Step은 ItemReader, ItemProcessor, ItemWriter 빈을 하나씩 가지고 있거나, 이런 전형적인 구조가 아닐 경우, Tasklet 빈을 가질 수도 있다.

우선 메인 애플리케이션 클래스를 작성한다.

@SpringBootApplication
public class BatchApplication {

    public static void main(String[] args){
        SpringApplication.run(BatchApplication.class, args);
    }

}

@SpringBootApplication 어노테이션으로 Spring Boot의 기본 어플리케이션을 생성한다.

다음 Job을 생성한다.

@Configuration
@EnableBatchProcessing
public class JobConfiguration {

    private static final String JOB_NAME = "jobName";

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private Step stepName;

    @Bean
    public Job job() {
        return jobBuilderFactory.get(JOB_NAME)
            .start(StepName)
            .build();
    }

}

@Configuration 어노테이션으로 설정 파일임을 명시하고, @EnableBatchProcessing 어노테이션으로 Job 생성에 필요한 핀들을 자동으로 가져온다.

Job을 생성하기 위해서 JobBuilderFactory를 가져오고, Job에 들어갈 Step도 가져온다.
Step 파일을 따로 만들경우, 해당 Step 이름으로 자동 주입시키면 되고, 아니면 Job 설정 파일에 Step 빈을 같이 설정해도 무관하다.

본인은 다음과 같이 Step 설정 클래스를 따로 작성하였다.

@Configuration
public class StepConfiguration {

    private static final String STEP_NAME = "StepName";

    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Step Step() {
        return stepBuilderFactory.get(STEP_NAME)
            .<InputType, OutputType>chunk(1)
            .reader(sampleItemReader())
            .processor(sampleItemProcessor())
            .writer(sampleItemWriter())
            .build();
    }

    @Bean
    public ItemReader<InputType> sampleItemReader() {
        MyBatisPagingItemReader<InputType> reader = new MyBatisPagingItemReader<InputType>();
        reader.setSqlSessionFactory(sqlSessionFactory);
        reader.setQueryId("mapper.package.path.MapperClass.MethodName");

        return reader;
    }

    @Bean
    public ItemProcessor<InputType, OutputType> sampleItemProcessor() {
        return new SampleItemProcessor();
    }

    @Bean
    public ItemWriter<OutputType> sampleItemWriter() {
        MyBatisBatchItemWriter<OutputType> writer = new MyBatisBatchItemWriter<OutputType>();
        writer.setSqlSessionFactory(sqlSessionFactory);
        writer.setStatementId("mapper.package.path.MapperClass.MethodName");

        return writer;
    }

}

우선 Step을 생성하기 위해 StepBuilderFactory도 주입한다. 그리고 본인은 현재 Mybatis를 사용하고 있으므로 SqlSessionFactory를 주입한다. JPA를 쓸 경우에는 EntityManagerFactory를 주입하면 된다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

chunk 는 하나의 트랜잭션 안에서 처리할 read의 단위를 설정한다. 3이라면 3개의 아이템을 하나의 트랜잭션 안에서 읽은 후 한번에 write하게 된다.

Mybatis를 이용하는 경우에는 예제 처럼 Mybatis를 지원하는 ItemReaderItemWriter를 사용하면 편하다. (Spring Batch의 입출력은 여러 DB 플랫폼 혹은 파일 같은 다양한 수단을 지원한다)

ItemProcessor는 정의하지 않는 경우에는 ItemReader에서 바로 ItemWriter로 넘어가게 된다. 로직을 추가할 필요가 있는 경우에는 ItemProcessor 인터페이스를 구현하고 process() 메소드를 오버라이드 해서 구현하면 프로세서를 거쳐가게 된다.
 

여기까지 하면 기본적인 Job-Step 설정이 완료 된다. Gradle이나 Maven 등으로 빌드하여 jar 파일을 실행하면 설정한 Job이 돌아가게 된다. 만약에 만든 애플리케이션에 Job이 여러개 있는 경우 다음과 같이 특정 Job 이름을 지정(콤마로 구분)해서 실행해 줄 수 있다.

java -jar path/of/jar/batch.jar --spring.batch.job.names=jobName1,jobName2…

 

주의 : 애플리케이션 안에 Job-Step-Reader-Processor-Writer가 여러개일 경우 빈 이름을 모두 다르게 지어야 엉뚱한 빈이 주입되는 일이 일어나지 않는다. Reader-Processor-Writer의 경우 메소드 이름으로 구별하면 된다.
 

끝!

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
106 Spring MVC Dropdown Box Example file 졸리운_곰 2018.03.26 214
105 SpringBoot JPA 예제 졸리운_곰 2018.03.13 344
104 스프링 CKEditor 적용 - 에디터 졸리운_곰 2018.03.07 2594
103 spring ckeditor 파일업로드 예제 (file upload) file 졸리운_곰 2018.03.07 2036
102 CKEditor 사용 및 파일 업로드 적용 졸리운_곰 2018.03.07 164
101 Spring MVC Checkbox And Checkboxes Example 자바 스프링 mvc 체크박스 샘플 file 졸리운_곰 2018.03.07 80
100 SPRING MVC - CHECKBOXES EXAMPLE 자바 스프링 mvc 체크박스 예제 file 졸리운_곰 2018.03.07 184
99 Spring MVC Dropdown Box Example 스프링 웹 개발 [콤보 선택 박스] file 졸리운_곰 2018.03.07 238
98 SPRING과 ANGULAR2 연동해서 실행하기 file 졸리운_곰 2018.02.12 198
97 두번째, 스프링 배치보다 간편한 스프링 Quartz 졸리운_곰 2018.02.08 118
96 첫번째, 스프링 배치보다 간편한 스프링 Quartz 졸리운_곰 2018.02.08 104
95 JAVA] Quartz (쿼츠)를 사용하여 자바 스케줄링(scheduling) 하기 졸리운_곰 2018.02.08 628
» Spring Batch를 이용한 기본적인 Batch Application 졸리운_곰 2018.02.08 81
93 Quartz + Spring Batch 조합하기 file 졸리운_곰 2018.02.08 2061
92 스프링 web MVC와 앵귤러의 통합 How to configure AngularJs with Spring MVC | SpringBoot file 졸리운_곰 2018.01.28 204
91 스프링 부트와 앵귤러의 통합 : Spring Boot and AngularJS Integration Tutorial file 졸리운_곰 2018.01.28 492
90 mybatis에서 selectKey 사용법 졸리운_곰 2018.01.24 391
89 Spring form:form 태그 설명 졸리운_곰 2018.01.24 180
88 java spring form 태그 졸리운_곰 2018.01.24 147
87 Spring MVC - 값 전달 file 졸리운_곰 2018.01.24 94
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED