Spring Batch 처음 실행해봅니다. 👨‍💻 ( 완전 간단 예제 )

2023. 10. 11. 13:24·개발중/Spring Batch
728x90
반응형

 

 

전체 코드 입니다.

 

 

package com.rsn.dic.RsnDictionaryBatch.datamailsend;

import org.springframework.batch.core.*;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.support.DefaultBatchConfiguration;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Date;

@Configuration
@EnableBatchProcessing
public class DataMailSendConfig extends DefaultBatchConfiguration {

    @Bean
    public CommandLineRunner commandLineRunner(JobLauncher jobLauncher, Job job) {
        return new CommandLineRunner() {
            @Override
            public void run(String... args) throws Exception {

                System.out.println("Job Started !!");

                JobParametersBuilder paramsBuilder = new JobParametersBuilder();
                paramsBuilder.addString("currentTime", String.valueOf(new Date()));
                JobParameters parameters = paramsBuilder.toJobParameters();

                JobExecution jobExecution = jobLauncher.run(job, parameters);
                System.out.println("Job Status : " + jobExecution.getStatus());
            }
        };
    }

    @Bean
    public Job job(JobRepository jobRepository, PlatformTransactionManager transactionManager){
        return new JobBuilder("job", jobRepository)
                .start(step(jobRepository, transactionManager))
                .build();
    }

    @Bean
    public Step step(JobRepository jobRepository, PlatformTransactionManager transactionManager){
        return new StepBuilder("step",jobRepository)
                .<String, String>chunk(10, transactionManager)
                .reader(itemReader())
                .writer(itemWriter())
                .build();
    }

    private int cnt = 0;

    @Bean
    public ItemReader<String> itemReader(){
        return new ItemReader<String>() {
            @Override
            public String read() throws Exception{
                if (cnt < 10) {
                    cnt++;
                    return "Read OK " + cnt;
                } else {
                    return null;
                }
            }
        };
    }

    @Bean
    public ItemWriter<String> itemWriter(){
        return strList -> {
            strList.forEach(
                    str -> System.out.println(str)
            );
        };
    }

    @Override
    protected Charset getCharset() {
        return StandardCharsets.UTF_8;
    }
}

 

 

 

1. JobParameters 의 값이 같은 값이 들어가게 설정한다면 ?

  • could not increment id for batch_job_seq sequence table 에러가 발생합니다.

 

2. test 지만 itemReader 에서 계속 " Read OK " 라는 문자열을 반환하기 때문에 cnt 변수 이용하지 않으면 무한반복입니다.

  • DataBase 연결해서 데이터 진짜 조회할 때는 cnt 필요 없습니다.
728x90
반응형
저작자표시 (새창열림)

'개발중 > Spring Batch' 카테고리의 다른 글

Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'  (0) 2024.12.26
Spring Batch 관련 Table 자동 생성 안될 때 수동 생성하는 방법  (1) 2024.11.19
[Spring Batch] 낙관적 잠금 오류 (OptimisticLockingFailureException) 해결하기  (0) 2024.04.19
Spring Batch 로 대용량 일괄처리하기. (대용량 데이터 조회 > 액셀 생성 > 메일 발송)  (1) 2023.10.13
[Spring Batch 에러] Caused by:org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAMEFROM BATCH_JOB_INSTANCEWHERE JOB_NAME = ? and JOB_KEY = ?]  (0) 2023.10.11
'개발중/Spring Batch' 카테고리의 다른 글
  • Spring Batch 관련 Table 자동 생성 안될 때 수동 생성하는 방법
  • [Spring Batch] 낙관적 잠금 오류 (OptimisticLockingFailureException) 해결하기
  • Spring Batch 로 대용량 일괄처리하기. (대용량 데이터 조회 > 액셀 생성 > 메일 발송)
  • [Spring Batch 에러] Caused by:org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAMEFROM BATCH_JOB_INSTANCEWHERE JOB_NAME = ? and JOB_KEY = ?]
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (932)
      • 개발중 (634)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (87)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (17)
        • 기록 (1)
        • 캐글 스터디 (3)
        • R (12)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    VUE
    리눅스 마스터 1급
    파이썬
    스프링
    알고리즘
    리눅스 마스터
    docker
    네트워크 관리사 학점
    리눅스 마스터 1급 정리
    리눅스 마스터 1급 요약
    리눅스 1급 요약
    리눅스 마스터 요약
    네트워크 관리사 실기
    springboot
    파이썬 알고리즘
    redis
    BackendDevelopment
    java
    네트워크 관리사 2급 실기
    jpa
    네트워크 관리사 2급
    쿠버네티스 스터디
    네트워크 관리사 요약
    REST API
    Git 저장소
    쿠버네티스
    Spring
    네트워크 관리사 자격증
    네트워크 관리사
    git
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
Spring Batch 처음 실행해봅니다. 👨‍💻 ( 완전 간단 예제 )
상단으로

티스토리툴바