<aside>
🔗 참조 Github Code
</aside>
- Project 구현 -
1) Package 생성

2) JAVA 파일 생성
- PointMgtPracticeApplication.java 구현
@SpringBootApplication
@Slf4j
public class PointMgtPracticeApplication {
public static void main(String[] args) {
log.info("application arguments : " + String.join(",", args));
SpringApplication.run(PointMgtPracticeApplication.class, args);
}
}
-
BatchConfig.java 구현
- config package 생성
- BatchConfig.java 구현
package com.pcy.pmp.config;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.context.annotation.Configuration;
@EnableBatchProcessing
@Configuration
public class BatchConfig {
}
3) application.yml 구현
spring:
batch:
job:
names: ${job.name:NONE} # spring.batch.job.names를 job.name으로 치환
jdbc:
initialize-schema: always # batch에서 사용하는 스키마 생성여부를 always로 변경
jpa:
show-sql: true # sql 로그로 남기기를 true로 변경
hibernate:
ddl-auto: validate # entity를 보고 자동으로 데이터베이스 생성 여부를 validate (생성은 안하고 검증만)로 변경
- spring.batch.job.names: ${job.name:NONE}
job이름을 넣어주면 그 Job이름을 보고 job을 수행. 원래 대로라면 job 이름을 줄때 아래와 같이 입력.
java -jar batch.jar --spring.batch.job.names=expirePointJob 하지만 이 설정을 넣어주면 spring.batch.job.names를 job.name으로 치환해서 사용가능.
원래는 Job 이름을 넣지 않고 프로젝트를 실행시키면 모든 Job이 수행된다. 그러나 기본 Job이름을 NONE으로 설정해두면 job이름을 주지 않고 프로젝트를 실행시키면 그냥 아무런 Job도 수행하지 않는다.
java -jar batch.jar --job.name=expirePointJob
- spring.batch.jdbc.initialize-schema: always
Spring Batch는 배치의 중간 상태나 결과를 데이터베이스에 남길 수 있다. 각자 실행한 배치 기록을 남기겠다는 것이므로, 데이터베이스에 기록 저장용 스키마와 데이블이 있어야 한다. 이 테이블을 서버가 뜰때 확인해서 없으면 자동으로 만들어 줄 것인지 옵션이다. 만약에 테이블이 없다면 자동으로 만들어 배치가 수행된다.
- spring.jpa.show-sql : true
jpa가 Database에 요청하는 쿼리를 보여줄 것인지 아닌지 결정하는 값이다. true이면 쿼리를 보여준다.다만, 쿼리가 너무 많이 찍히게 되면 로그파일의 크기가 커지고 로그를 보기 어려워질 수도 있어서 상황에 맞게 사용해야 한다.
- spring.jpa.hibernate.ddl-auto: validate
코드에서 선언한 Entity를 보고 실제 database에 DDL을 반영할지 선택하는 값이다.
- none: 아무런 행동도 하지 않습니다.
- update: Database와 다른점이 있는지 확인하고 다른 부분만 변경.
- validate: Database와 코드가 다른지 확인합니다. 다르면 에러가 발생되고 종료.
- create: 프로그램이 시작할 때 모든 Database를 드랍하고 코드를 보고 새로 만든다.
- create-drop: 프로그램이 시작할 때 모든 Database를 드랍하고 코드를 보고 새로 만든다.
그리고 프로그램이 종료되면 다시 Database를 드랍.