-
Spring Batch 구현 - 1[공부] 프로그래밍/Spring・Spring Boot (JAVA) 2024. 4. 16. 16:33
♧ 전체 코드 : https://github.com/woodisco/pass-batch
GitHub - woodisco/pass-batch
Contribute to woodisco/pass-batch development by creating an account on GitHub.
github.com
프로젝트 생성 및 샘플 코드 작성
- Spring boot
- Gradle
- Spring Batch
- MySQL 8
- JPA
- Lombok
- ModelMapper
1. 프로젝트 생성
2. application.yml 파일 수정
=> 일단 테스트를 위해 h2를 사용spring: datasource: url: jdbc:h2:mem:mydb username: woojoo password: 0425 driver-class-name: org.h2.Driver
3. @EnableBatchProcessing 설정
=> 버전업으로 인해 설정할 필요 없이 4번 진행하기@EnableBatchProcessing은 Spring Batch 프레임워크에서 제공하는 어노테이션으로, 배치 처리를 활성화하는 데 사용됩니다. 이 어노테이션을 사용하면 Spring Batch에서 필요한 설정을 자동으로 구성할 수 있습니다.
@EnableBatchProcessing 어노테이션은 Spring Boot 애플리케이션에서 배치 처리를 구성하고 실행하는 데 필요한 여러 빈(bean)들을 자동으로 설정합니다.
이 어노테이션을 사용하면 Spring Batch에서 다음과 같은 기본적인 구성이 활성화됩니다:
・ JobRepository: 배치 작업의 메타데이터를 저장하는 데 사용되는 레포지토리를 구성합니다.
・ JobLauncher: 배치 작업을 실행하는 데 사용되는 런처를 구성합니다.
・ JobRegistry: 배치 작업을 등록하고 검색하는 데 사용되는 레지스트리를 구성합니다.
・ TransactionManager: 배치 작업의 트랜잭션 관리를 위한 트랜잭션 매니저를 구성합니다.
4. Config 파일 생성 : 간단한 샘플 만들어 보기
=> 버전업으로 인해 JobBuilderFactory, StepBuilderFactory를 사용할 수 없게 되었기 때문에 Config를 만들어 해결하기'org.springframework.batch.core.configuration.annotation.jobbuilderfactory' is deprecated
참조 : https://mindasom.tistory.com/168
package com.fastcampus.pass.config; import org.springframework.context.annotation.Configuration; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.job.builder.JobBuilder; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.context.annotation.Bean; import org.springframework.transaction.PlatformTransactionManager; @Configuration public class BatchConfig { @Bean public Job passJob(JobRepository jobRepository, Step passStep) { return new JobBuilder("passJob", jobRepository) .start(passStep) .build(); } @Bean public Step passStep(final JobRepository jobRepository, final Tasklet passTasklet, final PlatformTransactionManager platformTransactionManager) { return new StepBuilder("passStep", jobRepository) .tasklet(passTasklet, platformTransactionManager) .build(); } @Bean public Tasklet passTasklet() { return ((contribution, chunkContext) -> { System.out.println("======Execute PassStep======"); //성공이면 출력 return RepeatStatus.FINISHED; }); } }
여기까지 작업 후 실행하면 로그가 잘 나오는것을 확인 할 수 있다
Docker MySQL 설치 및 생성
Docker Compose란?
도커 컴포즈는 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구입니다. 보통 하나 이상의 도커 컨테이너로 구성된 애플리케이션을 관리하고 배포할 때 사용됩니다. 도커 컴포즈 파일은 YAML 형식으로 작성되며, 각 컨테이너의 설정과 서비스 간의 의존성을 정의합니다.
도커 컴포즈 파일을 사용하면 docker-compose up 명령어를 실행하여 모든 서비스를 한 번에 실행할 수 있습니다. 도커 컴포즈는 각 서비스의 의존성을 파악하고, 정의된 설정에 따라 컨테이너를 생성하고 실행합니다.
1. Docker Compose 파일 만들기touch docker-compose.yml
① Docker Hub의 MySQL 자료에서 Docker Compose 참조하기
https://hub.docker.com/_/mysqlmysql - Official Image | Docker Hub
Quick reference Supported tags and respective Dockerfile links 8.3.0, 8.3, 8, innovation, latest, 8.3.0-oraclelinux8, 8.3-oraclelinux8, 8-oraclelinux8, innovation-oraclelinux8, oraclelinux8, 8.3.0-oracle, 8.3-oracle, 8-oracle, innovation-oracle, oracle 8.0
hub.docker.com
② docker.docs의 volume에서 Docker Compose 참조하기
https://docs.docker.com/storage/volumes/Volumes
Learn how to create, manage, and use volumes instead of bind mounts for persisting data generated and used by Docker.
docs.docker.com
volumes가 필요한 이유?
도커 컨테이너는 기본적으로 컨테이너가 삭제될 때 데이터가 함께 사라지게 되는데 계속 데이터를 유지할 수 있도록 하는 방법 중 하나가 볼륨이다.# Docker Compose의 버전 정보 version: '3.8' services: mysql: # 서비스의 이름 container_name: mysql_local image: mysql:8.0.30 volumes: - ./db/conf.d:/etc/mysql/conf.d - ./db/initdb.d:/docker-entrypoint-initdb.d # 컨테이너가 시작되면 이 폴더 내의 sh, sql파일 실행 ports: - "3306:3306" environment: # 환경 변수 - MYSQL_DATABASE=pass_local - MYSQL_USER=test - MYSQL_PASSWORD=test - MYSQL_ROOT_PASSWORD=test - TZ=Asia/Tokyo
③ 호스팅 디렉토리 만들기
- db/conf.d/my.cnf
- db/initdb.d/create_table.sql
- db/initdb.d/insert_data.sql
2. 실행하기make db-up
위의 커맨드 실행 시, 해당 에러 발생
make: *** No rule to make target `db-up'. Stop.
해결 : Makefile 파일 생성하기
db-up: # 시작, 실행 docker-compose up -d --build --force-recreate # -d: 백그라운드 실행, --force-recreate: 강제 재생성 (수정시에 반드시 필요) db-down: # 정지, 종료 docker-compose down -v # -v: volume 삭제
DBeaver 연결
출처 : 패스트캠퍼스 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 초격차 패키지 Online
'[공부] 프로그래밍 > Spring・Spring Boot (JAVA)' 카테고리의 다른 글
Spring Batch 구현 - 3 (0) 2024.04.24 Spring Batch 구현 - 2 (0) 2024.04.18 Scheduler 구현 (0) 2024.04.09 MessageSource 처리 (0) 2024.04.04 ApplicationContext 란 (0) 2024.04.03