[Spring batch] Step 1 - 최초의 Batch app 만들기
스프링 배치로 배치 서비스를 개발해 보고자 한다.
구현하고자 하는 배치 서비스의 프로세스는 다음과 같다
CSV 파일 읽기 => RDBMS 에 Insert 하기
JSON 파일 읽기 => RDBMS에 Insert 하기
RDBMS 테이블(쿼리) 읽기 => RDBMS에 Insert 하기
RDBMS 테이블(쿼리) 읽기 => RDBMS에 Update 하기
RDBMS 테이블(쿼리) 읽기 => FlatFile 로 저장하기
첫 시작이니 Hello World 부터 찍어보겠다.
이 포스트의 내용은 "스프링배치 완벽가이드" 내용에 근거해 있다.
개발환경 : 인텔리J
DBMS : mariaDB
1. 프로젝트 생성
1) New Project > Spring Initializr > Next
2) I/O 항목에서 Spring Batch, Validation 선택
3) SQL 항목에서 JDBC API 및 MariaDB Driver 선택
4) Developer Tools 에서 Lombok 선택
5) Finish 클릭
2. 아래의 코드를 작성한다.
//batch 생성시 필수 어노테이션
@EnableBatchProcessing
@SpringBootApplication
public class BatchApplication {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
//스텝을 만든다.
@Bean
public Step step(){
return this.stepBuilderFactory.get("step1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
// Hello, world 출력
System.out.println("Hello, world");
return RepeatStatus.FINISHED;
}
}).build();
}
//잡을 만든다.
@Bean
public Job job() {
return this.jobBuilderFactory.get("job1")
.start(step())
.build();
}
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
}
3. resources 에 application.yml 파일을 생성한 후, mariadb conn 정보를 입력한다.
spring:
datasource:
url: jdbc:mariadb://localhost:3306/test_db
username: {id}
password: {password}
driver-class-name: org.mariadb.jdbc.Driver
batch:
jdbc:
initialize-schema: always #스키마가 없을경우 자동생성해준다.
4. BatchApplication 에 마우스 우클릭한 후, Run 으로 실행한다.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.6.4)
2022-03-20 22:46:00.081 INFO 16512 --- [ main] com.sunnier.batch.BatchApplication : Starting BatchApplication using Java 1.8.0_202 on DESKTOP-AHN11RT with PID 16512 (C:\git_repo\batch\target\classes started by sunni in C:\git_repo\batch)
2022-03-20 22:46:00.081 INFO 16512 --- [ main] com.sunnier.batch.BatchApplication : No active profile set, falling back to 1 default profile: "default"
2022-03-20 22:46:01.114 INFO 16512 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2022-03-20 22:46:01.185 INFO 16512 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2022-03-20 22:46:01.338 INFO 16512 --- [ main] o.s.b.c.r.s.JobRepositoryFactoryBean : No database type set, using meta data indicating: MYSQL
2022-03-20 22:46:01.457 INFO 16512 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : No TaskExecutor has been set, defaulting to synchronous executor.
2022-03-20 22:46:01.629 INFO 16512 --- [ main] com.sunnier.batch.BatchApplication : Started BatchApplication in 2.087 seconds (JVM running for 3.095)
2022-03-20 22:46:01.629 INFO 16512 --- [ main] o.s.b.a.b.JobLauncherApplicationRunner : Running default command line with: [foo=to]
2022-03-20 22:46:01.729 INFO 16512 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=job1]] launched with the following parameters: [{foo=to}]
2022-03-20 22:46:01.791 INFO 16512 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [step1]
Hello, world
2022-03-20 22:46:01.834 INFO 16512 --- [ main] o.s.batch.core.step.AbstractStep : Step: [step1] executed in 43ms
2022-03-20 22:46:01.861 INFO 16512 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=job1]] completed with the following parameters: [{foo=to}] and the following status: [COMPLETED] in 112ms
2022-03-20 22:46:01.866 INFO 16512 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2022-03-20 22:46:01.878 INFO 16512 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
Disconnected from the target VM, address: '127.0.0.1:62720', transport: 'socket'
Process finished with exit code 0
5. Hello, world 라고 출력되는 부분을 확인한다.
※ jar 파일로 만들어 실행하고자 할 경우, Run/Debug Confiurations 에 Maven을 추가하고, Command line 에 "clean package" 를 넣으면 target 디렉토리에 Jar파일이 생성된다
(실행은 java -jar XXXX.jar)