From 635828eb4a7c29c8e39b48e1b8db14ce38df6992 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Mon, 30 May 2022 00:06:42 +0900 Subject: [PATCH] spring batch: hello spring batch --- spring-batch/basic/build.gradle | 4 ++ .../basic/hello/DBJobConfiguration.java | 46 ++++++++++++++ .../basic/hello/HelloJobConfiguration.java | 61 +++++++++++++++++++ .../basic/src/main/resources/application.yml | 34 +++++++++++ 4 files changed, 145 insertions(+) create mode 100644 spring-batch/basic/src/main/java/io/springbatch/basic/hello/DBJobConfiguration.java create mode 100644 spring-batch/basic/src/main/java/io/springbatch/basic/hello/HelloJobConfiguration.java diff --git a/spring-batch/basic/build.gradle b/spring-batch/basic/build.gradle index e4f6d952..10a7828a 100644 --- a/spring-batch/basic/build.gradle +++ b/spring-batch/basic/build.gradle @@ -14,6 +14,10 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-batch' + implementation 'mysql:mysql-connector-java:8.0.29' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' diff --git a/spring-batch/basic/src/main/java/io/springbatch/basic/hello/DBJobConfiguration.java b/spring-batch/basic/src/main/java/io/springbatch/basic/hello/DBJobConfiguration.java new file mode 100644 index 00000000..731698e2 --- /dev/null +++ b/spring-batch/basic/src/main/java/io/springbatch/basic/hello/DBJobConfiguration.java @@ -0,0 +1,46 @@ +package io.springbatch.basic.hello; + +import lombok.RequiredArgsConstructor; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@RequiredArgsConstructor +public class DBJobConfiguration { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + @Bean + public Job job() { + return jobBuilderFactory.get("job") + .start(step1()) + .next(step2()) + .build(); + } + + @Bean + public Step step1() { + return stepBuilderFactory.get("step1") + .tasklet((contribution, chunkContext) -> { + System.out.println("step1 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } + + @Bean + public Step step2() { + return stepBuilderFactory.get("step2") + .tasklet((contribution, chunkContext) -> { + System.out.println("step2 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } +} diff --git a/spring-batch/basic/src/main/java/io/springbatch/basic/hello/HelloJobConfiguration.java b/spring-batch/basic/src/main/java/io/springbatch/basic/hello/HelloJobConfiguration.java new file mode 100644 index 00000000..87e6a244 --- /dev/null +++ b/spring-batch/basic/src/main/java/io/springbatch/basic/hello/HelloJobConfiguration.java @@ -0,0 +1,61 @@ +package io.springbatch.basic.hello; + +import lombok.RequiredArgsConstructor; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.StepContribution; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.scope.context.ChunkContext; +import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@RequiredArgsConstructor +public class HelloJobConfiguration { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + @Bean + public Job helloJob() { + return jobBuilderFactory.get("helloJob") + .start(helloStep1()) + .next(helloStep2()) + .build(); + } + + @Bean + public Step helloStep1() { + return stepBuilderFactory.get("helloStep1") + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + + System.out.println(" ======================= "); + System.out.println(" >> Hello Spring Batch!! "); + System.out.println(" ======================= "); + + return RepeatStatus.FINISHED; // tasklet 은 무한반복하므로 FINISHED 또는 null 일 경우 종료 + } + }) + .build(); + } + + @Bean + public Step helloStep2() { + return stepBuilderFactory.get("helloStep2") + .tasklet((contribution, chunkContext) -> { + + System.out.println(" ======================= "); + System.out.println(" >> Step2 was execute!!! "); + System.out.println(" ======================= "); + + return RepeatStatus.FINISHED; // tasklet 은 무한반복하므로 FINISHED 또는 null 일 경우 종료 + }) + .build(); + } + +} diff --git a/spring-batch/basic/src/main/resources/application.yml b/spring-batch/basic/src/main/resources/application.yml index 8b137891..b64f08f9 100644 --- a/spring-batch/basic/src/main/resources/application.yml +++ b/spring-batch/basic/src/main/resources/application.yml @@ -1 +1,35 @@ +spring: + profiles: + active: local +--- + +spring: + config: + activate: + on-profile: local + + datasource: + hikari: + jdbc-url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + username: sa + password: + driver-class-name: org.h2.Driver + +--- + +spring: + config: + activate: + on-profile: mysql + + datasource: + hikari: + jdbc-url: jdbc:mysql://localhost:3306/springbatch?useUnicode=true&characterEncoding=utf8 + username: root + password: 1234 + driver-class-name: com.mysql.cj.jdbc.Driver + + batch: + jdbc: + initialize-schema: always \ No newline at end of file