From fa9f024f416e2fb2a681f220d7e3642775931253 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Mon, 14 Jun 2021 17:18:26 +0900 Subject: [PATCH 01/99] spirng batch --- pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pom.xml b/pom.xml index 38d49b1..cf33793 100644 --- a/pom.xml +++ b/pom.xml @@ -27,11 +27,6 @@ mysql-connector-java runtime - - org.springframework.boot - spring-boot-configuration-processor - true - org.projectlombok lombok From 596202935978405a18d91f762a50c7d788a6db66 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Mon, 14 Jun 2021 17:20:57 +0900 Subject: [PATCH 02/99] spirng batch --- src/main/java/exam/HelloBatchConfiguration.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/exam/HelloBatchConfiguration.java diff --git a/src/main/java/exam/HelloBatchConfiguration.java b/src/main/java/exam/HelloBatchConfiguration.java new file mode 100644 index 0000000..77326ca --- /dev/null +++ b/src/main/java/exam/HelloBatchConfiguration.java @@ -0,0 +1,7 @@ +package exam; + +import org.springframework.context.annotation.Configuration; + +@Configuration +public class HelloBatchConfiguration { +} From 76a1c009e40c725566e706912b5f3c5a8d3be9db Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 15 Jun 2021 11:19:50 +0900 Subject: [PATCH 03/99] spirng batch --- pom.xml | 5 +- .../java/exam/HelloBatchConfiguration.java | 7 --- .../HelloJobConfiguration.java | 52 +++++++++++++++++++ .../SpringBatchLectureApplication.java | 2 + src/main/resources/application.properties | 1 - 5 files changed, 56 insertions(+), 11 deletions(-) delete mode 100644 src/main/java/exam/HelloBatchConfiguration.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java diff --git a/pom.xml b/pom.xml index cf33793..725a86d 100644 --- a/pom.xml +++ b/pom.xml @@ -21,10 +21,9 @@ org.springframework.boot spring-boot-starter-batch - - mysql - mysql-connector-java + com.h2database + h2 runtime diff --git a/src/main/java/exam/HelloBatchConfiguration.java b/src/main/java/exam/HelloBatchConfiguration.java deleted file mode 100644 index 77326ca..0000000 --- a/src/main/java/exam/HelloBatchConfiguration.java +++ /dev/null @@ -1,7 +0,0 @@ -package exam; - -import org.springframework.context.annotation.Configuration; - -@Configuration -public class HelloBatchConfiguration { -} diff --git a/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java new file mode 100644 index 0000000..9e65b91 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java @@ -0,0 +1,52 @@ +package io.springbatch.springbatchlecture; + +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; + + +@RequiredArgsConstructor +@Configuration +public class HelloJobConfiguration { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + @Bean + public Job helloJob() { + return this.jobBuilderFactory.get("helloJob") + .start(step1()) + .next(step2()) + .build(); + } + + @Bean + public Step step1() { + return stepBuilderFactory.get("step1") + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + System.out.println("step1 has executed"); + return RepeatStatus.FINISHED; + } + }) + .build(); + } + @Bean + public Step step2() { + return stepBuilderFactory.get("step2") + .tasklet((contribution, chunkContext) -> { + System.out.println("step2 has executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/SpringBatchLectureApplication.java b/src/main/java/io/springbatch/springbatchlecture/SpringBatchLectureApplication.java index 0d8b2d4..8930a69 100644 --- a/src/main/java/io/springbatch/springbatchlecture/SpringBatchLectureApplication.java +++ b/src/main/java/io/springbatch/springbatchlecture/SpringBatchLectureApplication.java @@ -1,9 +1,11 @@ package io.springbatch.springbatchlecture; +import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication +@EnableBatchProcessing public class SpringBatchLectureApplication { public static void main(String[] args) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b13789..e69de29 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +0,0 @@ - From d0a7cb9bf83224472674813f70592dd67671d748 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 15 Jun 2021 11:21:32 +0900 Subject: [PATCH 04/99] spirng batch --- .../io/springbatch/springbatchlecture/HelloJobConfiguration.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java index 9e65b91..909922c 100644 --- a/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java @@ -12,7 +12,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; - @RequiredArgsConstructor @Configuration public class HelloJobConfiguration { From e11c0a3dde05e98f080aee4f3506888af0f41274 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 17:15:20 +0900 Subject: [PATCH 05/99] spirng batch --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 725a86d..ed01c87 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ spring-batch-lecture Demo project for Spring Boot - 11 + 1.8 From 9af98c3f991cb534d404ed3c5b45686195dd50de Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 14:47:10 +0900 Subject: [PATCH 06/99] spirng batch --- src/main/resources/application.properties | 0 src/main/resources/application.yml | 36 +++++++++++++++++++++++ 2 files changed, 36 insertions(+) delete mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/application.yml diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..e3fbc5a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,36 @@ +spring: + profiles: + active: local + batch: + job: + enabled: false + +--- +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 + batch: + jdbc: + initialize-schema: embedded + +--- +spring: + config: + activate: + on-profile: mysql + datasource: + hikari: + jdbc-url: jdbc:mysql://localhost:3306/springbatch?useUnicode=true&characterEncoding=utf8 + username: root + password: pass + driver-class-name: com.mysql.jdbc.Driver + batch: + jdbc: + initialize-schema: always \ No newline at end of file From fe567bd7c22b45db758af88d3d1363fec562f48f Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 16:08:10 +0900 Subject: [PATCH 07/99] spirng batch --- ...nfiguration.java => JobConfiguration.java} | 6 +-- .../springbatchlecture/JobConfiguration2.java | 51 +++++++++++++++++++ src/main/resources/application.yml | 1 + 3 files changed, 55 insertions(+), 3 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{HelloJobConfiguration.java => JobConfiguration.java} (93%) create mode 100644 src/main/java/io/springbatch/springbatchlecture/JobConfiguration2.java diff --git a/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java similarity index 93% rename from src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java index 909922c..6dfbc5b 100644 --- a/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java @@ -14,14 +14,14 @@ @RequiredArgsConstructor @Configuration -public class HelloJobConfiguration { +public class JobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean - public Job helloJob() { - return this.jobBuilderFactory.get("helloJob") + public Job batchJob() { + return this.jobBuilderFactory.get("batchJob1") .start(step1()) .next(step2()) .build(); diff --git a/src/main/java/io/springbatch/springbatchlecture/JobConfiguration2.java b/src/main/java/io/springbatch/springbatchlecture/JobConfiguration2.java new file mode 100644 index 0000000..b3c3d03 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/JobConfiguration2.java @@ -0,0 +1,51 @@ +package io.springbatch.springbatchlecture; + +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; + +@RequiredArgsConstructor +@Configuration +public class JobConfiguration2 { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + @Bean + public Job batchJob2() { + return this.jobBuilderFactory.get("batchJob2") + .start(step3()) + .next(step4()) + .build(); + } + + @Bean + public Step step3() { + return stepBuilderFactory.get("step3") + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + System.out.println("step3 has executed"); + return RepeatStatus.FINISHED; + } + }) + .build(); + } + @Bean + public Step step4() { + return stepBuilderFactory.get("step4") + .tasklet((contribution, chunkContext) -> { + System.out.println("step4 has executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e3fbc5a..e6de886 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,6 +4,7 @@ spring: batch: job: enabled: false + names: ${job.name:NONE} --- spring: From a5a08837d10ee5de1acc412ff697f32bf8ea68c4 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 16:15:49 +0900 Subject: [PATCH 08/99] spirng batch --- pom.xml | 5 +++++ .../io/springbatch/springbatchlecture/JobConfiguration.java | 2 +- src/main/resources/application.yml | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ed01c87..42ddc51 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,11 @@ org.springframework.boot spring-boot-starter-batch + + mysql + mysql-connector-java + runtime + com.h2database h2 diff --git a/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java index 6dfbc5b..f4dc964 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java @@ -20,7 +20,7 @@ public class JobConfiguration { private final StepBuilderFactory stepBuilderFactory; @Bean - public Job batchJob() { + public Job batchJob1() { return this.jobBuilderFactory.get("batchJob1") .start(step1()) .next(step2()) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e6de886..4fb13ef 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -3,7 +3,7 @@ spring: active: local batch: job: - enabled: false +# enabled: false names: ${job.name:NONE} --- From f6bfc6116b844a13492230ea2e2d9617a4e171ca Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 16:39:07 +0900 Subject: [PATCH 09/99] spirng batch --- ...iguration2.java => FlowConfiguration.java} | 22 +++++----- ...tion.java => JobBuilderConfiguration.java} | 6 ++- .../JobBuilderConfiguration2.java | 44 +++++++++++++++++++ 3 files changed, 61 insertions(+), 11 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{JobConfiguration2.java => FlowConfiguration.java} (82%) rename src/main/java/io/springbatch/springbatchlecture/{JobConfiguration.java => JobBuilderConfiguration.java} (88%) create mode 100644 src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration2.java diff --git a/src/main/java/io/springbatch/springbatchlecture/JobConfiguration2.java b/src/main/java/io/springbatch/springbatchlecture/FlowConfiguration.java similarity index 82% rename from src/main/java/io/springbatch/springbatchlecture/JobConfiguration2.java rename to src/main/java/io/springbatch/springbatchlecture/FlowConfiguration.java index b3c3d03..0d61ae5 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobConfiguration2.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlowConfiguration.java @@ -6,6 +6,8 @@ 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.job.builder.FlowBuilder; +import org.springframework.batch.core.job.flow.Flow; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; @@ -14,19 +16,10 @@ @RequiredArgsConstructor @Configuration -public class JobConfiguration2 { +public class FlowConfiguration { - private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - @Bean - public Job batchJob2() { - return this.jobBuilderFactory.get("batchJob2") - .start(step3()) - .next(step4()) - .build(); - } - @Bean public Step step3() { return stepBuilderFactory.get("step3") @@ -48,4 +41,13 @@ public Step step4() { }) .build(); } + + @Bean + public Flow flow() { + FlowBuilder flowBuilder = new FlowBuilder<>("flow"); + flowBuilder.start(step3()) + .next(step4()) + .end(); + return flowBuilder.build(); + } } diff --git a/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java similarity index 88% rename from src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java index f4dc964..387d1aa 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java @@ -6,6 +6,8 @@ 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.job.flow.Flow; +import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; @@ -14,14 +16,16 @@ @RequiredArgsConstructor @Configuration -public class JobConfiguration { +public class JobBuilderConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; + private final Flow flow; @Bean public Job batchJob1() { return this.jobBuilderFactory.get("batchJob1") + .incrementer(new RunIdIncrementer()) .start(step1()) .next(step2()) .build(); diff --git a/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration2.java b/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration2.java new file mode 100644 index 0000000..6ce74a1 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration2.java @@ -0,0 +1,44 @@ +package io.springbatch.springbatchlecture; + +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.job.flow.Flow; +import org.springframework.batch.core.launch.support.RunIdIncrementer; +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; + +@RequiredArgsConstructor +@Configuration +public class JobBuilderConfiguration2 { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + private final Flow flow; + + @Bean + public Job batchJob2() { + return this.jobBuilderFactory.get("batchJob2") + .incrementer(new RunIdIncrementer()) + .start(flow) + .next(step5()) + .end() + .build(); + } + + @Bean + public Step step5() { + return stepBuilderFactory.get("step5") + .tasklet((contribution, chunkContext) -> { + System.out.println("step5 has executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } +} From f2611b659b5f9eb6b60a1982626b7e3260a06d43 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 16:48:08 +0900 Subject: [PATCH 10/99] spirng batch --- .../springbatchlecture/JobBuilderConfiguration.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java index 387d1aa..fb9f4e5 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java @@ -34,12 +34,9 @@ public Job batchJob1() { @Bean public Step step1() { return stepBuilderFactory.get("step1") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println("step1 has executed"); - return RepeatStatus.FINISHED; - } + .tasklet((contribution, chunkContext) -> { + System.out.println("step1 has executed"); + return RepeatStatus.FINISHED; }) .build(); } From a099693640e212ae524f4a5717b0d8aa4d9decc9 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 16:51:13 +0900 Subject: [PATCH 11/99] spirng batch --- .../springbatchlecture/FlowConfiguration.java | 53 ------------------- .../JobBuilderConfiguration2.java | 44 --------------- ...ation.java => SimpleJobConfiguration.java} | 10 ++-- 3 files changed, 3 insertions(+), 104 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/FlowConfiguration.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration2.java rename src/main/java/io/springbatch/springbatchlecture/{JobBuilderConfiguration.java => SimpleJobConfiguration.java} (82%) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlowConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlowConfiguration.java deleted file mode 100644 index 0d61ae5..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/FlowConfiguration.java +++ /dev/null @@ -1,53 +0,0 @@ -package io.springbatch.springbatchlecture; - -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.job.builder.FlowBuilder; -import org.springframework.batch.core.job.flow.Flow; -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; - -@RequiredArgsConstructor -@Configuration -public class FlowConfiguration { - - private final StepBuilderFactory stepBuilderFactory; - - @Bean - public Step step3() { - return stepBuilderFactory.get("step3") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println("step3 has executed"); - return RepeatStatus.FINISHED; - } - }) - .build(); - } - @Bean - public Step step4() { - return stepBuilderFactory.get("step4") - .tasklet((contribution, chunkContext) -> { - System.out.println("step4 has executed"); - return RepeatStatus.FINISHED; - }) - .build(); - } - - @Bean - public Flow flow() { - FlowBuilder flowBuilder = new FlowBuilder<>("flow"); - flowBuilder.start(step3()) - .next(step4()) - .end(); - return flowBuilder.build(); - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration2.java b/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration2.java deleted file mode 100644 index 6ce74a1..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration2.java +++ /dev/null @@ -1,44 +0,0 @@ -package io.springbatch.springbatchlecture; - -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.job.flow.Flow; -import org.springframework.batch.core.launch.support.RunIdIncrementer; -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; - -@RequiredArgsConstructor -@Configuration -public class JobBuilderConfiguration2 { - - private final JobBuilderFactory jobBuilderFactory; - private final StepBuilderFactory stepBuilderFactory; - private final Flow flow; - - @Bean - public Job batchJob2() { - return this.jobBuilderFactory.get("batchJob2") - .incrementer(new RunIdIncrementer()) - .start(flow) - .next(step5()) - .end() - .build(); - } - - @Bean - public Step step5() { - return stepBuilderFactory.get("step5") - .tasklet((contribution, chunkContext) -> { - System.out.println("step5 has executed"); - return RepeatStatus.FINISHED; - }) - .build(); - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java similarity index 82% rename from src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java index fb9f4e5..668e031 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobBuilderConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java @@ -3,28 +3,24 @@ 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.job.flow.Flow; import org.springframework.batch.core.launch.support.RunIdIncrementer; -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; @RequiredArgsConstructor @Configuration -public class JobBuilderConfiguration { +public class SimpleJobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - private final Flow flow; @Bean - public Job batchJob1() { - return this.jobBuilderFactory.get("batchJob1") + public Job batchJob() { + return this.jobBuilderFactory.get("batchJob") .incrementer(new RunIdIncrementer()) .start(step1()) .next(step2()) From 85f4f93c87f8b1f90435336bc83e979583a4be08 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 17:05:43 +0900 Subject: [PATCH 12/99] spirng batch --- .../SimpleJobConfiguration.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java index 668e031..1f16bae 100644 --- a/src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java @@ -1,6 +1,8 @@ package io.springbatch.springbatchlecture; import lombok.RequiredArgsConstructor; +import org.springframework.batch.core.BatchStatus; +import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; @@ -24,6 +26,7 @@ public Job batchJob() { .incrementer(new RunIdIncrementer()) .start(step1()) .next(step2()) + .next(step3()) .build(); } @@ -45,4 +48,16 @@ public Step step2() { }) .build(); } + @Bean + public Step step3() { + return stepBuilderFactory.get("step3") + .tasklet((contribution, chunkContext) -> { +// throw new RuntimeException("failed"); + chunkContext.getStepContext().getStepExecution().setStatus(BatchStatus.FAILED); + contribution.setExitStatus(ExitStatus.STOPPED); + System.out.println("step3 has executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } } From 8894b274706098ffc3230730800d8683edc87d9e Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 17:08:48 +0900 Subject: [PATCH 13/99] spirng batch --- ...eJobConfiguration.java => StartNextConfiguration.java} | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{SimpleJobConfiguration.java => StartNextConfiguration.java} (82%) diff --git a/src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java similarity index 82% rename from src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java index 1f16bae..76dabb9 100644 --- a/src/main/java/io/springbatch/springbatchlecture/SimpleJobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java @@ -1,13 +1,10 @@ package io.springbatch.springbatchlecture; import lombok.RequiredArgsConstructor; -import org.springframework.batch.core.BatchStatus; -import org.springframework.batch.core.ExitStatus; 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.core.job.flow.Flow; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.context.annotation.Bean; @@ -15,7 +12,7 @@ @RequiredArgsConstructor @Configuration -public class SimpleJobConfiguration { +public class StartNextConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -52,9 +49,6 @@ public Step step2() { public Step step3() { return stepBuilderFactory.get("step3") .tasklet((contribution, chunkContext) -> { -// throw new RuntimeException("failed"); - chunkContext.getStepContext().getStepExecution().setStatus(BatchStatus.FAILED); - contribution.setExitStatus(ExitStatus.STOPPED); System.out.println("step3 has executed"); return RepeatStatus.FINISHED; }) From 631cfa08ec5e4176f234f542a6ab265aaa7ef65a Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 17:32:16 +0900 Subject: [PATCH 14/99] spirng batch --- .../CustomJobParametersIncrementer.java | 20 +++++++++++++++++++ ...ion.java => IncrementerConfiguration.java} | 6 ++++-- 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomJobParametersIncrementer.java rename src/main/java/io/springbatch/springbatchlecture/{StartNextConfiguration.java => IncrementerConfiguration.java} (88%) diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersIncrementer.java b/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersIncrementer.java new file mode 100644 index 0000000..4e2d870 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersIncrementer.java @@ -0,0 +1,20 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.JobParametersBuilder; +import org.springframework.batch.core.JobParametersIncrementer; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class CustomJobParametersIncrementer implements JobParametersIncrementer { + + static final SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmmss"); + + public JobParameters getNext(JobParameters parameters) { + String id = format.format(new Date()); + return new JobParametersBuilder().addString("run.id", id).toJobParameters(); + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/IncrementerConfiguration.java similarity index 88% rename from src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/IncrementerConfiguration.java index 76dabb9..5228640 100644 --- a/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/IncrementerConfiguration.java @@ -12,15 +12,17 @@ @RequiredArgsConstructor @Configuration -public class StartNextConfiguration { +public class IncrementerConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; + private final CustomJobParametersIncrementer customJobParametersIncrementer; @Bean public Job batchJob() { return this.jobBuilderFactory.get("batchJob") - .incrementer(new RunIdIncrementer()) +// .incrementer(new RunIdIncrementer()) + .incrementer(customJobParametersIncrementer) .start(step1()) .next(step2()) .next(step3()) From 73c8187f36dcb0c7927fded26ec5b7e75a01f720 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 16:30:56 +0900 Subject: [PATCH 15/99] spring batch --- .../CustomJobParametersIncrementer.java | 20 ------------------- .../CustomJobParametersValidator.java | 17 ++++++++++++++++ ...ation.java => ValidatorConfiguration.java} | 9 ++++----- 3 files changed, 21 insertions(+), 25 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomJobParametersIncrementer.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomJobParametersValidator.java rename src/main/java/io/springbatch/springbatchlecture/{IncrementerConfiguration.java => ValidatorConfiguration.java} (85%) diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersIncrementer.java b/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersIncrementer.java deleted file mode 100644 index 4e2d870..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersIncrementer.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.core.JobParameters; -import org.springframework.batch.core.JobParametersBuilder; -import org.springframework.batch.core.JobParametersIncrementer; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Date; - -@Component -public class CustomJobParametersIncrementer implements JobParametersIncrementer { - - static final SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmmss"); - - public JobParameters getNext(JobParameters parameters) { - String id = format.format(new Date()); - return new JobParametersBuilder().addString("run.id", id).toJobParameters(); - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersValidator.java b/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersValidator.java new file mode 100644 index 0000000..a09c2c5 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersValidator.java @@ -0,0 +1,17 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.core.*; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.Date; + +public class CustomJobParametersValidator implements JobParametersValidator { + + @Override + public void validate(JobParameters jobParameters) throws JobParametersInvalidException { + if (jobParameters.getString("name") == null) { + throw new JobParametersInvalidException("name parameter is not found."); + } + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/IncrementerConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ValidatorConfiguration.java similarity index 85% rename from src/main/java/io/springbatch/springbatchlecture/IncrementerConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/ValidatorConfiguration.java index 5228640..571b631 100644 --- a/src/main/java/io/springbatch/springbatchlecture/IncrementerConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ValidatorConfiguration.java @@ -5,24 +5,23 @@ 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.core.launch.support.RunIdIncrementer; +import org.springframework.batch.core.job.DefaultJobParametersValidator; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @RequiredArgsConstructor @Configuration -public class IncrementerConfiguration { +public class ValidatorConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - private final CustomJobParametersIncrementer customJobParametersIncrementer; @Bean public Job batchJob() { return this.jobBuilderFactory.get("batchJob") -// .incrementer(new RunIdIncrementer()) - .incrementer(customJobParametersIncrementer) +// .validator(new CustomJobParametersValidator()) + .validator(new DefaultJobParametersValidator(new String[]{"name"},new String[]{"year"})) .start(step1()) .next(step2()) .next(step3()) From e3909e2de45eca13b83bb56d40f25199739ecd39 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 16:43:30 +0900 Subject: [PATCH 16/99] spring batch --- .../CustomJobParametersValidator.java | 17 ----------------- ...on.java => PreventRestartConfiguration.java} | 8 ++++---- 2 files changed, 4 insertions(+), 21 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomJobParametersValidator.java rename src/main/java/io/springbatch/springbatchlecture/{ValidatorConfiguration.java => PreventRestartConfiguration.java} (87%) diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersValidator.java b/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersValidator.java deleted file mode 100644 index a09c2c5..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomJobParametersValidator.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.core.*; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Date; - -public class CustomJobParametersValidator implements JobParametersValidator { - - @Override - public void validate(JobParameters jobParameters) throws JobParametersInvalidException { - if (jobParameters.getString("name") == null) { - throw new JobParametersInvalidException("name parameter is not found."); - } - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/ValidatorConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java similarity index 87% rename from src/main/java/io/springbatch/springbatchlecture/ValidatorConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java index 571b631..b92b5b0 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ValidatorConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java @@ -12,7 +12,7 @@ @RequiredArgsConstructor @Configuration -public class ValidatorConfiguration { +public class PreventRestartConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -20,11 +20,10 @@ public class ValidatorConfiguration { @Bean public Job batchJob() { return this.jobBuilderFactory.get("batchJob") -// .validator(new CustomJobParametersValidator()) - .validator(new DefaultJobParametersValidator(new String[]{"name"},new String[]{"year"})) .start(step1()) .next(step2()) .next(step3()) +// .preventRestart() .build(); } @@ -51,7 +50,8 @@ public Step step3() { return stepBuilderFactory.get("step3") .tasklet((contribution, chunkContext) -> { System.out.println("step3 has executed"); - return RepeatStatus.FINISHED; + throw new RuntimeException("step has failed"); +// return RepeatStatus.FINISHED; }) .build(); } From 203595c218371b3ac53ad48cb086a4576cd1b7d1 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 16:45:34 +0900 Subject: [PATCH 17/99] spring batch --- .../springbatchlecture/PreventRestartConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java index b92b5b0..3e2336c 100644 --- a/src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java @@ -23,7 +23,7 @@ public Job batchJob() { .start(step1()) .next(step2()) .next(step3()) -// .preventRestart() + .preventRestart() .build(); } From 833e6daefd2b82f076539c134a435ede7f335acd Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 17:32:21 +0900 Subject: [PATCH 18/99] spring batch --- ...ion.java => StepBuilderConfiguration.java} | 52 +++++++++++++++---- 1 file changed, 41 insertions(+), 11 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{PreventRestartConfiguration.java => StepBuilderConfiguration.java} (56%) diff --git a/src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/StepBuilderConfiguration.java similarity index 56% rename from src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/StepBuilderConfiguration.java index 3e2336c..ea0783a 100644 --- a/src/main/java/io/springbatch/springbatchlecture/PreventRestartConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/StepBuilderConfiguration.java @@ -6,13 +6,19 @@ import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.job.DefaultJobParametersValidator; +import org.springframework.batch.core.job.builder.FlowBuilder; +import org.springframework.batch.core.job.flow.Flow; +import org.springframework.batch.core.partition.support.Partitioner; +import org.springframework.batch.item.*; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import java.util.Map; + @RequiredArgsConstructor @Configuration -public class PreventRestartConfiguration { +public class StepBuilderConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -23,7 +29,6 @@ public Job batchJob() { .start(step1()) .next(step2()) .next(step3()) - .preventRestart() .build(); } @@ -39,20 +44,45 @@ public Step step1() { @Bean public Step step2() { return stepBuilderFactory.get("step2") - .tasklet((contribution, chunkContext) -> { - System.out.println("step2 has executed"); - return RepeatStatus.FINISHED; - }) + .chunk(3) + .reader(() -> null) + .writer(list -> {}) .build(); } @Bean public Step step3() { return stepBuilderFactory.get("step3") - .tasklet((contribution, chunkContext) -> { - System.out.println("step3 has executed"); - throw new RuntimeException("step has failed"); -// return RepeatStatus.FINISHED; - }) + .partitioner(step1()) + .build(); + } + + @Bean + public Step step4() { + return stepBuilderFactory.get("step4") + .job(job()) + .build(); + } + + @Bean + public Step step5() { + return stepBuilderFactory.get("step5") + .flow(flow()) + .build(); + } + + @Bean + public Job job() { + return this.jobBuilderFactory.get("job") + .start(step1()) + .next(step2()) + .next(step3()) .build(); } + + @Bean + public Flow flow() { + FlowBuilder flowBuilder = new FlowBuilder<>("flow"); + flowBuilder.start(step2()).end(); + return flowBuilder.build(); + } } From 2c6d0c25e454428eb0ffe92c34085de3c63bcf3b Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 17:58:21 +0900 Subject: [PATCH 19/99] spring batch --- ...ion.java => TaskletStepConfiguration.java} | 59 +++++-------------- 1 file changed, 14 insertions(+), 45 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{StepBuilderConfiguration.java => TaskletStepConfiguration.java} (54%) diff --git a/src/main/java/io/springbatch/springbatchlecture/StepBuilderConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java similarity index 54% rename from src/main/java/io/springbatch/springbatchlecture/StepBuilderConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java index ea0783a..8ac6fd9 100644 --- a/src/main/java/io/springbatch/springbatchlecture/StepBuilderConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java @@ -10,15 +10,18 @@ import org.springframework.batch.core.job.flow.Flow; import org.springframework.batch.core.partition.support.Partitioner; import org.springframework.batch.item.*; +import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import java.util.Arrays; import java.util.Map; +import java.util.stream.Collectors; @RequiredArgsConstructor @Configuration -public class StepBuilderConfiguration { +public class TaskletStepConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -26,15 +29,14 @@ public class StepBuilderConfiguration { @Bean public Job batchJob() { return this.jobBuilderFactory.get("batchJob") - .start(step1()) - .next(step2()) - .next(step3()) + .start(taskStep()) + .next(chunkStep()) .build(); } @Bean - public Step step1() { - return stepBuilderFactory.get("step1") + public Step taskStep() { + return stepBuilderFactory.get("taskStep") .tasklet((contribution, chunkContext) -> { System.out.println("step1 has executed"); return RepeatStatus.FINISHED; @@ -42,47 +44,14 @@ public Step step1() { .build(); } @Bean - public Step step2() { - return stepBuilderFactory.get("step2") + public Step chunkStep() { + return stepBuilderFactory.get("chunkStep") .chunk(3) - .reader(() -> null) - .writer(list -> {}) - .build(); - } - @Bean - public Step step3() { - return stepBuilderFactory.get("step3") - .partitioner(step1()) - .build(); - } - - @Bean - public Step step4() { - return stepBuilderFactory.get("step4") - .job(job()) - .build(); - } - - @Bean - public Step step5() { - return stepBuilderFactory.get("step5") - .flow(flow()) - .build(); - } - - @Bean - public Job job() { - return this.jobBuilderFactory.get("job") - .start(step1()) - .next(step2()) - .next(step3()) + .reader(new ListItemReader(Arrays.asList("item1","item2","item3"))) + .writer(list -> { + list.forEach(item -> System.out.println(item)); + }) .build(); } - @Bean - public Flow flow() { - FlowBuilder flowBuilder = new FlowBuilder<>("flow"); - flowBuilder.start(step2()).end(); - return flowBuilder.build(); - } } From 43ea94f9d2e13096f83190904196889c63599f7f Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 18:45:20 +0900 Subject: [PATCH 20/99] spring batch --- .../springbatch/springbatchlecture/TaskletStepConfiguration.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java index 8ac6fd9..2336397 100644 --- a/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java @@ -42,6 +42,7 @@ public Step taskStep() { return RepeatStatus.FINISHED; }) .build(); + } @Bean public Step chunkStep() { From 225a91b35120581d435f92e11992e7ee36d12850 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 18:45:41 +0900 Subject: [PATCH 21/99] spring batch --- .../springbatch/springbatchlecture/TaskletStepConfiguration.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java index 2336397..8ac6fd9 100644 --- a/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java @@ -42,7 +42,6 @@ public Step taskStep() { return RepeatStatus.FINISHED; }) .build(); - } @Bean public Step chunkStep() { From f79b2be203ed9b07bb88b138176433375259ce6d Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 19:23:54 +0900 Subject: [PATCH 22/99] spring batch --- .../springbatchlecture/CustomTasklet.java | 19 +++++++++++ ...uration.java => TaskletConfiguration.java} | 34 ++++++++++--------- 2 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomTasklet.java rename src/main/java/io/springbatch/springbatchlecture/{TaskletStepConfiguration.java => TaskletConfiguration.java} (59%) diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomTasklet.java b/src/main/java/io/springbatch/springbatchlecture/CustomTasklet.java new file mode 100644 index 0000000..5774623 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomTasklet.java @@ -0,0 +1,19 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.core.StepContribution; +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.stereotype.Component; + +@Component +public class CustomTasklet implements Tasklet { + + @Override + public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { + + System.out.println("stepContribution = " + stepContribution + ", chunkContext = " + chunkContext); + + return RepeatStatus.FINISHED; + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/TaskletConfiguration.java similarity index 59% rename from src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/TaskletConfiguration.java index 8ac6fd9..29aebc0 100644 --- a/src/main/java/io/springbatch/springbatchlecture/TaskletStepConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/TaskletConfiguration.java @@ -3,12 +3,15 @@ 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.job.DefaultJobParametersValidator; import org.springframework.batch.core.job.builder.FlowBuilder; import org.springframework.batch.core.job.flow.Flow; import org.springframework.batch.core.partition.support.Partitioner; +import org.springframework.batch.core.scope.context.ChunkContext; +import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.item.*; import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.repeat.RepeatStatus; @@ -21,37 +24,36 @@ @RequiredArgsConstructor @Configuration -public class TaskletStepConfiguration { +public class TaskletConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; + private final CustomTasklet customTasklet; @Bean public Job batchJob() { return this.jobBuilderFactory.get("batchJob") - .start(taskStep()) - .next(chunkStep()) + .start(step1()) + .next(step2()) .build(); } @Bean - public Step taskStep() { - return stepBuilderFactory.get("taskStep") - .tasklet((contribution, chunkContext) -> { - System.out.println("step1 has executed"); - return RepeatStatus.FINISHED; + public Step step1() { + return stepBuilderFactory.get("step1") + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { + System.out.println("stepContribution = " + stepContribution + ", chunkContext = " + chunkContext); + return RepeatStatus.FINISHED; + } }) .build(); } @Bean - public Step chunkStep() { - return stepBuilderFactory.get("chunkStep") - .chunk(3) - .reader(new ListItemReader(Arrays.asList("item1","item2","item3"))) - .writer(list -> { - list.forEach(item -> System.out.println(item)); - }) + public Step step2() { + return stepBuilderFactory.get("step2") + .tasklet(customTasklet) .build(); } - } From c90f2df41117c13903dcae647103a717ba1ab056 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 19:32:15 +0900 Subject: [PATCH 23/99] spring batch --- .../springbatchlecture/CustomTasklet.java | 19 ------------------- ...uration.java => JobStepConfiguration.java} | 11 ++++++++--- 2 files changed, 8 insertions(+), 22 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomTasklet.java rename src/main/java/io/springbatch/springbatchlecture/{TaskletConfiguration.java => JobStepConfiguration.java} (82%) diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomTasklet.java b/src/main/java/io/springbatch/springbatchlecture/CustomTasklet.java deleted file mode 100644 index 5774623..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomTasklet.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.core.StepContribution; -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.stereotype.Component; - -@Component -public class CustomTasklet implements Tasklet { - - @Override - public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { - - System.out.println("stepContribution = " + stepContribution + ", chunkContext = " + chunkContext); - - return RepeatStatus.FINISHED; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/TaskletConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java similarity index 82% rename from src/main/java/io/springbatch/springbatchlecture/TaskletConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java index 29aebc0..11054f5 100644 --- a/src/main/java/io/springbatch/springbatchlecture/TaskletConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java @@ -24,11 +24,10 @@ @RequiredArgsConstructor @Configuration -public class TaskletConfiguration { +public class JobStepConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - private final CustomTasklet customTasklet; @Bean public Job batchJob() { @@ -53,7 +52,13 @@ public RepeatStatus execute(StepContribution stepContribution, ChunkContext chun @Bean public Step step2() { return stepBuilderFactory.get("step2") - .tasklet(customTasklet) + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { + System.out.println("stepContribution = " + stepContribution + ", chunkContext = " + chunkContext); + return RepeatStatus.FINISHED; + } + }) .build(); } } From 49a83c616f9ac7c477e4ee8cc6e6785a81f2f068 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 19:59:38 +0900 Subject: [PATCH 24/99] spring batch --- .../JobStepConfiguration.java | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java index 11054f5..3025471 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java @@ -9,8 +9,10 @@ import org.springframework.batch.core.job.DefaultJobParametersValidator; import org.springframework.batch.core.job.builder.FlowBuilder; import org.springframework.batch.core.job.flow.Flow; +import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.core.partition.support.Partitioner; import org.springframework.batch.core.scope.context.ChunkContext; +import org.springframework.batch.core.step.job.DefaultJobParametersExtractor; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.item.*; import org.springframework.batch.item.support.ListItemReader; @@ -30,35 +32,43 @@ public class JobStepConfiguration { private final StepBuilderFactory stepBuilderFactory; @Bean - public Job batchJob() { - return this.jobBuilderFactory.get("batchJob") - .start(step1()) + public Job parentJob() { + return this.jobBuilderFactory.get("parentJob") + .start(jobStep(null)) .next(step2()) .build(); } - + @Bean + public Step jobStep(JobLauncher jobLauncher) { + return this.stepBuilderFactory.get("jobStep") + .job(childJob()) + .launcher(jobLauncher) + .parametersExtractor(jobParametersExtractor()) + .build(); + } + @Bean + public Job childJob() { + return this.jobBuilderFactory.get("childJob") + .start(step1()) + .build(); + } @Bean public Step step1() { return stepBuilderFactory.get("step1") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { - System.out.println("stepContribution = " + stepContribution + ", chunkContext = " + chunkContext); - return RepeatStatus.FINISHED; - } - }) + .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED) .build(); } @Bean public Step step2() { return stepBuilderFactory.get("step2") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { - System.out.println("stepContribution = " + stepContribution + ", chunkContext = " + chunkContext); - return RepeatStatus.FINISHED; - } - }) + .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED) .build(); } + + @Bean + public DefaultJobParametersExtractor jobParametersExtractor() { + DefaultJobParametersExtractor extractor = new DefaultJobParametersExtractor(); + extractor.setKeys(new String[]{"input.file"}); + return extractor; + } } From 6c23a935b6225f446088b8831fc7c4df5a99c8ac Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 19 Jun 2021 20:01:16 +0900 Subject: [PATCH 25/99] spring batch --- .../{JobStepConfiguration.java => FlowJobConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{JobStepConfiguration.java => FlowJobConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java index 3025471..2d44aa6 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobStepConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java @@ -26,7 +26,7 @@ @RequiredArgsConstructor @Configuration -public class JobStepConfiguration { +public class FlowJobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From c75c245e29188b092a4c7749248f7ccd0bca50da Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 00:05:30 +0900 Subject: [PATCH 26/99] spring batch --- .../FlowJobConfiguration.java | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java index 2d44aa6..51260e3 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java @@ -32,43 +32,47 @@ public class FlowJobConfiguration { private final StepBuilderFactory stepBuilderFactory; @Bean - public Job parentJob() { - return this.jobBuilderFactory.get("parentJob") - .start(jobStep(null)) - .next(step2()) - .build(); - } - @Bean - public Step jobStep(JobLauncher jobLauncher) { - return this.stepBuilderFactory.get("jobStep") - .job(childJob()) - .launcher(jobLauncher) - .parametersExtractor(jobParametersExtractor()) - .build(); - } - @Bean - public Job childJob() { - return this.jobBuilderFactory.get("childJob") + public Job batchJob() { + return jobBuilderFactory.get("batchJob") .start(step1()) + .on("COMPLETED").to(step2()) + .next(step3()) + .end() .build(); } + @Bean public Step step1() { return stepBuilderFactory.get("step1") - .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED) - .build(); + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + System.out.println("step1 has executed"); + return RepeatStatus.FINISHED; + } + }).build(); } + @Bean public Step step2() { return stepBuilderFactory.get("step2") - .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED) - .build(); + .tasklet((contribution, chunkContext) -> { + System.out.println("step2 has executed"); + return RepeatStatus.FINISHED; + }).build(); } @Bean - public DefaultJobParametersExtractor jobParametersExtractor() { - DefaultJobParametersExtractor extractor = new DefaultJobParametersExtractor(); - extractor.setKeys(new String[]{"input.file"}); - return extractor; + public Step step3() { + return stepBuilderFactory.get("step3") + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + System.out.println("step3 has executed"); + return RepeatStatus.FINISHED; + } + }).build(); } + + } From 21910d326f2d7c9eb32ae81b2618dc49272021bc Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 00:14:12 +0900 Subject: [PATCH 27/99] spring batch --- ...guration.java => StartNextConfiguration.java} | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{FlowJobConfiguration.java => StartNextConfiguration.java} (90%) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java similarity index 90% rename from src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java index 51260e3..b4d7acc 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java @@ -26,7 +26,7 @@ @RequiredArgsConstructor @Configuration -public class FlowJobConfiguration { +public class StartNextConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -34,13 +34,22 @@ public class FlowJobConfiguration { @Bean public Job batchJob() { return jobBuilderFactory.get("batchJob") - .start(step1()) - .on("COMPLETED").to(step2()) + .start(flow()) .next(step3()) .end() .build(); } + @Bean + public Flow flow() { + FlowBuilder flowBuilder = new FlowBuilder<>("flow"); + flowBuilder.start(step1()) + .next(step2()) + .end(); + + return flowBuilder.build(); + } + @Bean public Step step1() { return stepBuilderFactory.get("step1") @@ -74,5 +83,4 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon }).build(); } - } From c2c4b0254558e5dff7463b50384f39e0b09e836d Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 00:22:05 +0900 Subject: [PATCH 28/99] spring batch --- .../StartNextConfiguration.java | 60 +++++++++++++++++-- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java index b4d7acc..b5ad720 100644 --- a/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java @@ -34,15 +34,17 @@ public class StartNextConfiguration { @Bean public Job batchJob() { return jobBuilderFactory.get("batchJob") - .start(flow()) + .start(flowA()) .next(step3()) + .next(flowB()) + .next(step6()) .end() .build(); } @Bean - public Flow flow() { - FlowBuilder flowBuilder = new FlowBuilder<>("flow"); + public Flow flowA() { + FlowBuilder flowBuilder = new FlowBuilder<>("flowA"); flowBuilder.start(step1()) .next(step2()) .end(); @@ -50,13 +52,23 @@ public Flow flow() { return flowBuilder.build(); } + @Bean + public Flow flowB() { + FlowBuilder flowBuilder = new FlowBuilder<>("flowB"); + flowBuilder.start(step4()) + .next(step5()) + .end(); + + return flowBuilder.build(); + } + @Bean public Step step1() { return stepBuilderFactory.get("step1") .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println("step1 has executed"); + System.out.println(">> step1 has executed"); return RepeatStatus.FINISHED; } }).build(); @@ -66,7 +78,7 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon public Step step2() { return stepBuilderFactory.get("step2") .tasklet((contribution, chunkContext) -> { - System.out.println("step2 has executed"); + System.out.println(">> step2 has executed"); return RepeatStatus.FINISHED; }).build(); } @@ -77,7 +89,43 @@ public Step step3() { .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println("step3 has executed"); + System.out.println(">> step3 has executed"); + return RepeatStatus.FINISHED; + } + }).build(); + } + + @Bean + public Step step4() { + return stepBuilderFactory.get("step4") + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + System.out.println(">> step4 has executed"); + return RepeatStatus.FINISHED; + } + }).build(); + } + + @Bean + public Step step5() { + return stepBuilderFactory.get("step5") + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + System.out.println(">> step5 has executed"); + return RepeatStatus.FINISHED; + } + }).build(); + } + + @Bean + public Step step6() { + return stepBuilderFactory.get("step6") + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + System.out.println(">> step6 has executed"); return RepeatStatus.FINISHED; } }).build(); From 1d7822c2e429814bdc9e53440900e3e80b59447f Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 00:44:21 +0900 Subject: [PATCH 29/99] spring batch --- ...tion.java => TransitionConfiguration.java} | 54 ++----------------- 1 file changed, 3 insertions(+), 51 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{StartNextConfiguration.java => TransitionConfiguration.java} (62%) diff --git a/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java similarity index 62% rename from src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java index b5ad720..a431814 100644 --- a/src/main/java/io/springbatch/springbatchlecture/StartNextConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java @@ -26,7 +26,7 @@ @RequiredArgsConstructor @Configuration -public class StartNextConfiguration { +public class TransitionConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -34,16 +34,14 @@ public class StartNextConfiguration { @Bean public Job batchJob() { return jobBuilderFactory.get("batchJob") - .start(flowA()) + .start(flow()) .next(step3()) - .next(flowB()) - .next(step6()) .end() .build(); } @Bean - public Flow flowA() { + public Flow flow() { FlowBuilder flowBuilder = new FlowBuilder<>("flowA"); flowBuilder.start(step1()) .next(step2()) @@ -52,16 +50,6 @@ public Flow flowA() { return flowBuilder.build(); } - @Bean - public Flow flowB() { - FlowBuilder flowBuilder = new FlowBuilder<>("flowB"); - flowBuilder.start(step4()) - .next(step5()) - .end(); - - return flowBuilder.build(); - } - @Bean public Step step1() { return stepBuilderFactory.get("step1") @@ -95,40 +83,4 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon }).build(); } - @Bean - public Step step4() { - return stepBuilderFactory.get("step4") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println(">> step4 has executed"); - return RepeatStatus.FINISHED; - } - }).build(); - } - - @Bean - public Step step5() { - return stepBuilderFactory.get("step5") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println(">> step5 has executed"); - return RepeatStatus.FINISHED; - } - }).build(); - } - - @Bean - public Step step6() { - return stepBuilderFactory.get("step6") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println(">> step6 has executed"); - return RepeatStatus.FINISHED; - } - }).build(); - } - } From d4b64dcff175c45c8fc875a7f55d6f2522ad3be2 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 00:59:33 +0900 Subject: [PATCH 30/99] spring batch --- .../TransitionConfiguration.java | 88 +++++++++++++------ 1 file changed, 59 insertions(+), 29 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java index a431814..f0f42f2 100644 --- a/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java @@ -1,15 +1,15 @@ package io.springbatch.springbatchlecture; 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.*; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.job.DefaultJobParametersValidator; import org.springframework.batch.core.job.builder.FlowBuilder; import org.springframework.batch.core.job.flow.Flow; import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.batch.core.launch.support.RunIdIncrementer; +import org.springframework.batch.core.listener.StepExecutionListenerSupport; import org.springframework.batch.core.partition.support.Partitioner; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.job.DefaultJobParametersExtractor; @@ -33,54 +33,84 @@ public class TransitionConfiguration { @Bean public Job batchJob() { - return jobBuilderFactory.get("batchJob") - .start(flow()) - .next(step3()) + return this.jobBuilderFactory.get("batchJob") + .start(step1()) + .on("FAILED") + .to(step2()) + .on("*") + .stop() + .from(step1()).on("*") + .to(step5()) + .next(step6()) + .on("COMPLETED") + .end() .end() .build(); } @Bean public Flow flow() { - FlowBuilder flowBuilder = new FlowBuilder<>("flowA"); - flowBuilder.start(step1()) - .next(step2()) + FlowBuilder flowBuilder = new FlowBuilder<>("flow"); + flowBuilder + .start(step3()) + .next(step4()) .end(); - return flowBuilder.build(); } @Bean public Step step1() { return stepBuilderFactory.get("step1") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println(">> step1 has executed"); - return RepeatStatus.FINISHED; - } - }).build(); + .tasklet((contribution, chunkContext) -> { + System.out.println(">> step1 has executed"); +// contribution.setExitStatus(ExitStatus.FAILED); + return RepeatStatus.FINISHED; + }) + .build(); } - @Bean public Step step2() { return stepBuilderFactory.get("step2") + .flow(flow()) + .build(); + } + @Bean + public Step step3() { + return stepBuilderFactory.get("step3") .tasklet((contribution, chunkContext) -> { - System.out.println(">> step2 has executed"); + System.out.println(">> step3 has executed"); return RepeatStatus.FINISHED; - }).build(); + }) + .build(); } @Bean - public Step step3() { - return stepBuilderFactory.get("step3") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println(">> step3 has executed"); - return RepeatStatus.FINISHED; - } - }).build(); + public Step step4() { + return stepBuilderFactory.get("step4") + .tasklet((contribution, chunkContext) -> { + System.out.println(">> step4 has executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } + + @Bean + public Step step5() { + return stepBuilderFactory.get("step5") + .tasklet((contribution, chunkContext) -> { + System.out.println(">> step5 has executed"); + return RepeatStatus.FINISHED; + }) + .build(); } + @Bean + public Step step6() { + return stepBuilderFactory.get("step6") + .tasklet((contribution, chunkContext) -> { + System.out.println(">> step6 has executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } } From a05efec826d71d17fe9e397664f6a950e90ac12d Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 01:10:39 +0900 Subject: [PATCH 31/99] spring batch --- .../TransitionConfiguration.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java index f0f42f2..5b2e083 100644 --- a/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java @@ -42,8 +42,10 @@ public Job batchJob() { .from(step1()).on("*") .to(step5()) .next(step6()) - .on("COMPLETED") + .on("DO PASS") .end() + .from(step6()).on("*") + .to(step7()) .end() .build(); } @@ -111,6 +113,30 @@ public Step step6() { System.out.println(">> step6 has executed"); return RepeatStatus.FINISHED; }) + .listener(new PassCheckingListener()) .build(); } + + @Bean + public Step step7() { + return stepBuilderFactory.get("step7") + .tasklet((contribution, chunkContext) -> { + System.out.println(">> step7 has executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } + + static class PassCheckingListener extends StepExecutionListenerSupport { + + public ExitStatus afterStep(StepExecution stepExecution) { + + String exitCode = stepExecution.getExitStatus().getExitCode(); + if (!exitCode.equals(ExitStatus.FAILED.getExitCode())) { + return new ExitStatus("DO PASS "); + } else { + return null; + } + } + } } From 441095be602d79c8999c473ae3892b6af95afd16 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 01:14:51 +0900 Subject: [PATCH 32/99] spring batch --- .../TransitionConfiguration.java | 69 +++---------------- 1 file changed, 9 insertions(+), 60 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java index 5b2e083..d13c380 100644 --- a/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java @@ -37,35 +37,20 @@ public Job batchJob() { .start(step1()) .on("FAILED") .to(step2()) - .on("*") - .stop() - .from(step1()).on("*") - .to(step5()) - .next(step6()) .on("DO PASS") - .end() - .from(step6()).on("*") - .to(step7()) + .stop() + .from(step2()).on("*") + .to(step3()) .end() .build(); } - @Bean - public Flow flow() { - FlowBuilder flowBuilder = new FlowBuilder<>("flow"); - flowBuilder - .start(step3()) - .next(step4()) - .end(); - return flowBuilder.build(); - } - @Bean public Step step1() { return stepBuilderFactory.get("step1") .tasklet((contribution, chunkContext) -> { System.out.println(">> step1 has executed"); -// contribution.setExitStatus(ExitStatus.FAILED); + contribution.setExitStatus(ExitStatus.FAILED); return RepeatStatus.FINISHED; }) .build(); @@ -73,60 +58,24 @@ public Step step1() { @Bean public Step step2() { return stepBuilderFactory.get("step2") - .flow(flow()) - .build(); - } - @Bean - public Step step3() { - return stepBuilderFactory.get("step3") - .tasklet((contribution, chunkContext) -> { - System.out.println(">> step3 has executed"); - return RepeatStatus.FINISHED; - }) - .build(); - } - - @Bean - public Step step4() { - return stepBuilderFactory.get("step4") .tasklet((contribution, chunkContext) -> { - System.out.println(">> step4 has executed"); - return RepeatStatus.FINISHED; - }) - .build(); - } - - @Bean - public Step step5() { - return stepBuilderFactory.get("step5") - .tasklet((contribution, chunkContext) -> { - System.out.println(">> step5 has executed"); - return RepeatStatus.FINISHED; - }) - .build(); - } - - @Bean - public Step step6() { - return stepBuilderFactory.get("step6") - .tasklet((contribution, chunkContext) -> { - System.out.println(">> step6 has executed"); + System.out.println(">> step2 has executed"); return RepeatStatus.FINISHED; }) .listener(new PassCheckingListener()) .build(); } - @Bean - public Step step7() { - return stepBuilderFactory.get("step7") + public Step step3() { + return stepBuilderFactory.get("step3") .tasklet((contribution, chunkContext) -> { - System.out.println(">> step7 has executed"); + System.out.println(">> step3 has executed"); return RepeatStatus.FINISHED; }) .build(); } + static class PassCheckingListener extends StepExecutionListenerSupport { public ExitStatus afterStep(StepExecution stepExecution) { From 3d1c5ca4a4051d225b38154b5102e5cb25022f16 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 13:00:55 +0900 Subject: [PATCH 33/99] spring batch --- .../JobExecutionDeciderConfiguration.java | 79 ++++++++++++++++ .../TransitionConfiguration.java | 91 ------------------- 2 files changed, 79 insertions(+), 91 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/JobExecutionDeciderConfiguration.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java diff --git a/src/main/java/io/springbatch/springbatchlecture/JobExecutionDeciderConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobExecutionDeciderConfiguration.java new file mode 100644 index 0000000..64b8ec5 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/JobExecutionDeciderConfiguration.java @@ -0,0 +1,79 @@ +package io.springbatch.springbatchlecture; + +import lombok.RequiredArgsConstructor; +import org.springframework.batch.core.*; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.job.flow.FlowExecutionStatus; +import org.springframework.batch.core.job.flow.JobExecutionDecider; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@RequiredArgsConstructor +@Configuration +public class JobExecutionDeciderConfiguration { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + @Bean + public Job job() { + return jobBuilderFactory.get("job") + .start(startStep()) + .next(decider()) + .from(decider()).on("ODD").to(oddStep()) + .from(decider()).on("EVEN").to(evenStep()) + .from(oddStep()).on("*").to(decider()) + .end() + .build(); + } + @Bean + public Step startStep() { + return stepBuilderFactory.get("startStep") + .tasklet((contribution, chunkContext) -> { + System.out.println("This is the start tasklet"); + return RepeatStatus.FINISHED; + }).build(); + } + + @Bean + public Step evenStep() { + return stepBuilderFactory.get("evenStep") + .tasklet((contribution, chunkContext) -> { + System.out.println(">>EvenStep has executed"); + return RepeatStatus.FINISHED; + }).build(); + } + + @Bean + public Step oddStep() { + return stepBuilderFactory.get("oddStep") + .tasklet((contribution, chunkContext) -> { + System.out.println(">>OddStep has executed"); + return RepeatStatus.FINISHED; + }).build(); + } + + @Bean + public JobExecutionDecider decider() { + return new CustomDecider(); + } + + public static class CustomDecider implements JobExecutionDecider { + + private int count = 0; + + @Override + public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { + count++; + + if(count % 2 == 0) { + return new FlowExecutionStatus("EVEN"); + } + else { + return new FlowExecutionStatus("ODD"); + } + } + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java deleted file mode 100644 index d13c380..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/TransitionConfiguration.java +++ /dev/null @@ -1,91 +0,0 @@ -package io.springbatch.springbatchlecture; - -import lombok.RequiredArgsConstructor; -import org.springframework.batch.core.*; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.job.DefaultJobParametersValidator; -import org.springframework.batch.core.job.builder.FlowBuilder; -import org.springframework.batch.core.job.flow.Flow; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.launch.support.RunIdIncrementer; -import org.springframework.batch.core.listener.StepExecutionListenerSupport; -import org.springframework.batch.core.partition.support.Partitioner; -import org.springframework.batch.core.scope.context.ChunkContext; -import org.springframework.batch.core.step.job.DefaultJobParametersExtractor; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.item.*; -import org.springframework.batch.item.support.ListItemReader; -import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Arrays; -import java.util.Map; -import java.util.stream.Collectors; - -@RequiredArgsConstructor -@Configuration -public class TransitionConfiguration { - - private final JobBuilderFactory jobBuilderFactory; - private final StepBuilderFactory stepBuilderFactory; - - @Bean - public Job batchJob() { - return this.jobBuilderFactory.get("batchJob") - .start(step1()) - .on("FAILED") - .to(step2()) - .on("DO PASS") - .stop() - .from(step2()).on("*") - .to(step3()) - .end() - .build(); - } - - @Bean - public Step step1() { - return stepBuilderFactory.get("step1") - .tasklet((contribution, chunkContext) -> { - System.out.println(">> step1 has executed"); - contribution.setExitStatus(ExitStatus.FAILED); - return RepeatStatus.FINISHED; - }) - .build(); - } - @Bean - public Step step2() { - return stepBuilderFactory.get("step2") - .tasklet((contribution, chunkContext) -> { - System.out.println(">> step2 has executed"); - return RepeatStatus.FINISHED; - }) - .listener(new PassCheckingListener()) - .build(); - } - @Bean - public Step step3() { - return stepBuilderFactory.get("step3") - .tasklet((contribution, chunkContext) -> { - System.out.println(">> step3 has executed"); - return RepeatStatus.FINISHED; - }) - .build(); - } - - - static class PassCheckingListener extends StepExecutionListenerSupport { - - public ExitStatus afterStep(StepExecution stepExecution) { - - String exitCode = stepExecution.getExitStatus().getExitCode(); - if (!exitCode.equals(ExitStatus.FAILED.getExitCode())) { - return new ExitStatus("DO PASS "); - } else { - return null; - } - } - } -} From 688c13768fb3e6bc165c3e6595b54e20c58bbadc Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 13:27:51 +0900 Subject: [PATCH 34/99] spring batch --- ...utionDeciderConfiguration.java => FlowJobConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{JobExecutionDeciderConfiguration.java => FlowJobConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobExecutionDeciderConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/JobExecutionDeciderConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java index 64b8ec5..db65df0 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobExecutionDeciderConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java @@ -12,7 +12,7 @@ @RequiredArgsConstructor @Configuration -public class JobExecutionDeciderConfiguration { +public class FlowJobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From f32486348aca8494441d488934c6895eca2adfbc Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 13:31:46 +0900 Subject: [PATCH 35/99] spring batch --- .../FlowJobConfiguration.java | 52 +++++++------------ 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java index db65df0..a4dd1ea 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java @@ -4,6 +4,8 @@ import org.springframework.batch.core.*; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.job.builder.FlowBuilder; +import org.springframework.batch.core.job.flow.Flow; import org.springframework.batch.core.job.flow.FlowExecutionStatus; import org.springframework.batch.core.job.flow.JobExecutionDecider; import org.springframework.batch.repeat.RepeatStatus; @@ -19,61 +21,47 @@ public class FlowJobConfiguration { @Bean public Job job() { - return jobBuilderFactory.get("job") - .start(startStep()) - .next(decider()) - .from(decider()).on("ODD").to(oddStep()) - .from(decider()).on("EVEN").to(evenStep()) - .from(oddStep()).on("*").to(decider()) + return jobBuilderFactory.get("batchJob") + .start(flow()) + .next(step3()) .end() .build(); } @Bean - public Step startStep() { - return stepBuilderFactory.get("startStep") + public Step step1() { + return stepBuilderFactory.get("step1") .tasklet((contribution, chunkContext) -> { - System.out.println("This is the start tasklet"); + System.out.println(">> step1 has executed"); return RepeatStatus.FINISHED; }).build(); } @Bean - public Step evenStep() { - return stepBuilderFactory.get("evenStep") + public Step step2() { + return stepBuilderFactory.get("step2") .tasklet((contribution, chunkContext) -> { - System.out.println(">>EvenStep has executed"); + System.out.println(">> step2 has executed"); return RepeatStatus.FINISHED; }).build(); } @Bean - public Step oddStep() { - return stepBuilderFactory.get("oddStep") + public Step step3() { + return stepBuilderFactory.get("step3") .tasklet((contribution, chunkContext) -> { - System.out.println(">>OddStep has executed"); + System.out.println(">> step3 has executed"); return RepeatStatus.FINISHED; }).build(); } @Bean - public JobExecutionDecider decider() { - return new CustomDecider(); - } - - public static class CustomDecider implements JobExecutionDecider { - - private int count = 0; + public Flow flow() { + FlowBuilder flowBuilder = new FlowBuilder<>("flow"); - @Override - public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { - count++; + flowBuilder.start(step1()) + .next(step2()) + .end(); - if(count % 2 == 0) { - return new FlowExecutionStatus("EVEN"); - } - else { - return new FlowExecutionStatus("ODD"); - } - } + return flowBuilder.build(); } } From 0a982b5011ea7af8e413ba1798a9c8253cc018ce Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 13:47:15 +0900 Subject: [PATCH 36/99] spring batch --- .../FlowJobConfiguration.java | 67 ------------------- .../JobScope_StepScope_Configuration.java | 47 +++++++++++++ 2 files changed, 47 insertions(+), 67 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java diff --git a/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java deleted file mode 100644 index a4dd1ea..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/FlowJobConfiguration.java +++ /dev/null @@ -1,67 +0,0 @@ -package io.springbatch.springbatchlecture; - -import lombok.RequiredArgsConstructor; -import org.springframework.batch.core.*; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.job.builder.FlowBuilder; -import org.springframework.batch.core.job.flow.Flow; -import org.springframework.batch.core.job.flow.FlowExecutionStatus; -import org.springframework.batch.core.job.flow.JobExecutionDecider; -import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@RequiredArgsConstructor -@Configuration -public class FlowJobConfiguration { - - private final JobBuilderFactory jobBuilderFactory; - private final StepBuilderFactory stepBuilderFactory; - - @Bean - public Job job() { - return jobBuilderFactory.get("batchJob") - .start(flow()) - .next(step3()) - .end() - .build(); - } - @Bean - public Step step1() { - return stepBuilderFactory.get("step1") - .tasklet((contribution, chunkContext) -> { - System.out.println(">> step1 has executed"); - return RepeatStatus.FINISHED; - }).build(); - } - - @Bean - public Step step2() { - return stepBuilderFactory.get("step2") - .tasklet((contribution, chunkContext) -> { - System.out.println(">> step2 has executed"); - return RepeatStatus.FINISHED; - }).build(); - } - - @Bean - public Step step3() { - return stepBuilderFactory.get("step3") - .tasklet((contribution, chunkContext) -> { - System.out.println(">> step3 has executed"); - return RepeatStatus.FINISHED; - }).build(); - } - - @Bean - public Flow flow() { - FlowBuilder flowBuilder = new FlowBuilder<>("flow"); - - flowBuilder.start(step1()) - .next(step2()) - .end(); - - return flowBuilder.build(); - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java b/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java new file mode 100644 index 0000000..46d132f --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java @@ -0,0 +1,47 @@ +package io.springbatch.springbatchlecture; + +import lombok.RequiredArgsConstructor; +import org.springframework.batch.core.*; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepScope; +import org.springframework.batch.core.job.builder.FlowBuilder; +import org.springframework.batch.core.job.flow.Flow; +import org.springframework.batch.core.job.flow.FlowExecutionStatus; +import org.springframework.batch.core.job.flow.JobExecutionDecider; +import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@RequiredArgsConstructor +@Configuration +public class JobScope_StepScope_Configuration { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + @Bean + public Job job() { + return jobBuilderFactory.get("batchJob") + .start(step1()) + .build(); + } + + @Bean + public Step step1() { + return stepBuilderFactory.get("step1") + .tasklet(tasklet(null)) + .build(); + } + + @Bean + @StepScope + public Tasklet tasklet(@Value("#{jobParameters['message']}") String message) { + return (stepContribution, chunkContext) -> { + System.out.println(message); + return RepeatStatus.FINISHED; + }; + } +} From 5f09d093211b65256076be59ed0b7eaaab367878 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 14:25:17 +0900 Subject: [PATCH 37/99] spring batch --- .../springbatchlecture/JobListener.java | 17 ++++++++ .../JobScope_StepScope_Configuration.java | 40 +++++++++++++++++-- 2 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/JobListener.java diff --git a/src/main/java/io/springbatch/springbatchlecture/JobListener.java b/src/main/java/io/springbatch/springbatchlecture/JobListener.java new file mode 100644 index 0000000..66fc798 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/JobListener.java @@ -0,0 +1,17 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobExecutionListener; + +public class JobListener implements JobExecutionListener { + + @Override + public void beforeJob(JobExecution jobExecution) { + jobExecution.getExecutionContext().putString("name", "user1"); + } + + @Override + public void afterJob(JobExecution jobExecution) { + + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java b/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java index 46d132f..ad420f0 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java @@ -3,6 +3,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.batch.core.*; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.JobScope; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepScope; import org.springframework.batch.core.job.builder.FlowBuilder; @@ -25,23 +26,54 @@ public class JobScope_StepScope_Configuration { @Bean public Job job() { return jobBuilderFactory.get("batchJob") - .start(step1()) + .start(step1(null)) + .next(step2()) + .listener(new JobListener()) .build(); } @Bean - public Step step1() { + @JobScope + public Step step1(@Value("#{jobExecutionContext['name']}") String name) { + System.out.println("jobExecutionContext['name'] : " + name); return stepBuilderFactory.get("step1") - .tasklet(tasklet(null)) + .tasklet(tasklet1(null)) + .build(); + } + + @Bean + public Step step2() { + return stepBuilderFactory.get("step2") + .tasklet(tasklet2(null)) + .listener(new StepExecutionListener() { + @Override + public void beforeStep(StepExecution stepExecution) { + stepExecution.getExecutionContext().putString("year", "2021"); + } + + @Override + public ExitStatus afterStep(StepExecution stepExecution) { + return null; + } + }) .build(); } @Bean @StepScope - public Tasklet tasklet(@Value("#{jobParameters['message']}") String message) { + public Tasklet tasklet1(@Value("#{jobParameters['message']}") String message) { return (stepContribution, chunkContext) -> { System.out.println(message); return RepeatStatus.FINISHED; }; } + + @Bean + @StepScope + public Tasklet tasklet2(@Value("#{stepExecutionContext['year']}") String year) { + return (stepContribution, chunkContext) -> { + System.out.println(year); + return RepeatStatus.FINISHED; + }; + } } From ad78b6712c58bb200a3bf8d68475f365b568688c Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 14:30:15 +0900 Subject: [PATCH 38/99] spring batch --- .../JobScope_StepScope_Configuration.java | 36 ++++++------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java b/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java index ad420f0..4d52bc5 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java @@ -10,6 +10,7 @@ import org.springframework.batch.core.job.flow.Flow; import org.springframework.batch.core.job.flow.FlowExecutionStatus; import org.springframework.batch.core.job.flow.JobExecutionDecider; +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.beans.factory.annotation.Value; @@ -28,51 +29,34 @@ public Job job() { return jobBuilderFactory.get("batchJob") .start(step1(null)) .next(step2()) - .listener(new JobListener()) .build(); } @Bean @JobScope - public Step step1(@Value("#{jobExecutionContext['name']}") String name) { - System.out.println("jobExecutionContext['name'] : " + name); + public Step step1(@Value("#{jobParameters['message']}") String message) { + + System.out.println("jobParameters['message'] : " + message); return stepBuilderFactory.get("step1") - .tasklet(tasklet1(null)) + .tasklet(tasklet1()) .build(); } @Bean public Step step2() { return stepBuilderFactory.get("step2") - .tasklet(tasklet2(null)) - .listener(new StepExecutionListener() { - @Override - public void beforeStep(StepExecution stepExecution) { - stepExecution.getExecutionContext().putString("year", "2021"); - } - - @Override - public ExitStatus afterStep(StepExecution stepExecution) { - return null; - } + .tasklet((contribution, chunkContext) -> { + System.out.println("step2 has executed"); + return RepeatStatus.FINISHED; }) .build(); } @Bean @StepScope - public Tasklet tasklet1(@Value("#{jobParameters['message']}") String message) { - return (stepContribution, chunkContext) -> { - System.out.println(message); - return RepeatStatus.FINISHED; - }; - } - - @Bean - @StepScope - public Tasklet tasklet2(@Value("#{stepExecutionContext['year']}") String year) { + public Tasklet tasklet1() { return (stepContribution, chunkContext) -> { - System.out.println(year); + System.out.println("tasklet1 has executed"); return RepeatStatus.FINISHED; }; } From f83916245acfe89c99947bfd075e449d81895430 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 14:37:16 +0900 Subject: [PATCH 39/99] spring batch --- ...iguration.java => ChunkConfiguration.java} | 31 ++++++++++--------- .../springbatchlecture/JobListener.java | 17 ---------- 2 files changed, 16 insertions(+), 32 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{JobScope_StepScope_Configuration.java => ChunkConfiguration.java} (72%) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/JobListener.java diff --git a/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java b/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java similarity index 72% rename from src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java rename to src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java index 4d52bc5..3ae550e 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobScope_StepScope_Configuration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java @@ -12,14 +12,19 @@ import org.springframework.batch.core.job.flow.JobExecutionDecider; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.item.ItemWriter; +import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import java.util.Arrays; +import java.util.List; + @RequiredArgsConstructor @Configuration -public class JobScope_StepScope_Configuration { +public class ChunkConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -27,18 +32,23 @@ public class JobScope_StepScope_Configuration { @Bean public Job job() { return jobBuilderFactory.get("batchJob") - .start(step1(null)) + .start(step1()) .next(step2()) .build(); } @Bean @JobScope - public Step step1(@Value("#{jobParameters['message']}") String message) { - - System.out.println("jobParameters['message'] : " + message); + public Step step1() { return stepBuilderFactory.get("step1") - .tasklet(tasklet1()) + .chunk(3) + .reader(new ListItemReader<>(Arrays.asList("item1", "item2", "item3"))) + .writer(new ItemWriter() { + @Override + public void write(List items) throws Exception { + items.forEach(item -> System.out.println(item)); + } + }) .build(); } @@ -51,13 +61,4 @@ public Step step2() { }) .build(); } - - @Bean - @StepScope - public Tasklet tasklet1() { - return (stepContribution, chunkContext) -> { - System.out.println("tasklet1 has executed"); - return RepeatStatus.FINISHED; - }; - } } diff --git a/src/main/java/io/springbatch/springbatchlecture/JobListener.java b/src/main/java/io/springbatch/springbatchlecture/JobListener.java deleted file mode 100644 index 66fc798..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/JobListener.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.core.JobExecution; -import org.springframework.batch.core.JobExecutionListener; - -public class JobListener implements JobExecutionListener { - - @Override - public void beforeJob(JobExecution jobExecution) { - jobExecution.getExecutionContext().putString("name", "user1"); - } - - @Override - public void afterJob(JobExecution jobExecution) { - - } -} From e0e4a0eaeaf1ac2b5251820f95dd778ef212b835 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 14:38:25 +0900 Subject: [PATCH 40/99] spring batch --- .../io/springbatch/springbatchlecture/ChunkConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java index 3ae550e..65c1f5c 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java @@ -42,7 +42,7 @@ public Job job() { public Step step1() { return stepBuilderFactory.get("step1") .chunk(3) - .reader(new ListItemReader<>(Arrays.asList("item1", "item2", "item3"))) + .reader(new ListItemReader<>(Arrays.asList("item1", "item2", "item3","item4", "item5", "item6"))) .writer(new ItemWriter() { @Override public void write(List items) throws Exception { From 8a57b3ce9b36fb8b4f81d5a75b6911ecdcef7e14 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 14:40:14 +0900 Subject: [PATCH 41/99] spring batch --- .../springbatch/springbatchlecture/ChunkConfiguration.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java index 65c1f5c..c48f2f8 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java @@ -12,6 +12,7 @@ import org.springframework.batch.core.job.flow.JobExecutionDecider; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.item.ItemProcessor; import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.repeat.RepeatStatus; @@ -43,6 +44,12 @@ public Step step1() { return stepBuilderFactory.get("step1") .chunk(3) .reader(new ListItemReader<>(Arrays.asList("item1", "item2", "item3","item4", "item5", "item6"))) + .processor(new ItemProcessor() { + @Override + public String process(String item) throws Exception { + return "my_" + item; + } + }) .writer(new ItemWriter() { @Override public void write(List items) throws Exception { From 6b99c2d0832fe6927797e1e3e309413029862a6a Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 14:41:20 +0900 Subject: [PATCH 42/99] spring batch --- ...onfiguration.java => ChunkOrientedTaskletConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{ChunkConfiguration.java => ChunkOrientedTaskletConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java index c48f2f8..c98aace 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ChunkConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java @@ -25,7 +25,7 @@ @RequiredArgsConstructor @Configuration -public class ChunkConfiguration { +public class ChunkOrientedTaskletConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From 83e3496944750fff10407e3900f7c429a79552d3 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 14:46:17 +0900 Subject: [PATCH 43/99] spring batch --- .../springbatchlecture/ChunkOrientedTaskletConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java index c98aace..214b64d 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java @@ -68,4 +68,4 @@ public Step step2() { }) .build(); } -} +} \ No newline at end of file From 67249ac4cdc245b3a70c50dac2388adfc42e3606 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 14:46:51 +0900 Subject: [PATCH 44/99] spring batch --- .../springbatchlecture/ChunkOrientedTaskletConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java index 214b64d..c98aace 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java @@ -68,4 +68,4 @@ public Step step2() { }) .build(); } -} \ No newline at end of file +} From 5bd205a4e6eadc3c126f252d55ee80206fd492fb Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 14:48:11 +0900 Subject: [PATCH 45/99] spring batch --- ...a => ItemReader_ItemProcessor_ItemWriter_Configuration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{ChunkOrientedTaskletConfiguration.java => ItemReader_ItemProcessor_ItemWriter_Configuration.java} (97%) diff --git a/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java similarity index 97% rename from src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java index c98aace..06c7809 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ChunkOrientedTaskletConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java @@ -25,7 +25,7 @@ @RequiredArgsConstructor @Configuration -public class ChunkOrientedTaskletConfiguration { +public class ItemReader_ItemProcessor_ItemWriter_Configuration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From c6feb6647f51de2cab670af5cdc6379efd500853 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 15:49:46 +0900 Subject: [PATCH 46/99] spring batch --- .../CustomItemProcessor.java | 16 ++++++++++ .../springbatchlecture/CustomItemReader.java | 23 +++++++++++++ .../springbatchlecture/CustomItemWriter.java | 13 ++++++++ .../springbatchlecture/Customer.java | 10 ++++++ ...temProcessor_ItemWriter_Configuration.java | 32 +++++++++++-------- 5 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomItemProcessor.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomItemWriter.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/Customer.java diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomItemProcessor.java b/src/main/java/io/springbatch/springbatchlecture/CustomItemProcessor.java new file mode 100644 index 0000000..e1e99bd --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomItemProcessor.java @@ -0,0 +1,16 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.item.ItemProcessor; +import org.springframework.batch.item.ItemReader; + +import java.util.ArrayList; +import java.util.List; + +public class CustomItemProcessor implements ItemProcessor { + + @Override + public Customer process(Customer customer) throws Exception { + customer.setName(customer.getName().toUpperCase()); + return null; + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java b/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java new file mode 100644 index 0000000..2bab6da --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java @@ -0,0 +1,23 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.item.ItemReader; + +import java.util.ArrayList; +import java.util.List; + +public class CustomItemReader implements ItemReader { + + private List list; + + public CustomItemReader(List list) { + this.list = new ArrayList<>(list); + } + + @Override + public Customer read() { + if (!list.isEmpty()) { + return list.remove(0); + } + return null; + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomItemWriter.java b/src/main/java/io/springbatch/springbatchlecture/CustomItemWriter.java new file mode 100644 index 0000000..3edafbb --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomItemWriter.java @@ -0,0 +1,13 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.item.ItemWriter; + +import java.util.List; + +public class CustomItemWriter implements ItemWriter { + + @Override + public void write(List items) throws Exception { + items.forEach(item -> System.out.println(item)); + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java new file mode 100644 index 0000000..14b5dfe --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -0,0 +1,10 @@ +package io.springbatch.springbatchlecture; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class Customer { + private String name; +} diff --git a/src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java b/src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java index 06c7809..ebd7d60 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java @@ -13,6 +13,7 @@ import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.item.ItemProcessor; +import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.repeat.RepeatStatus; @@ -43,22 +44,27 @@ public Job job() { public Step step1() { return stepBuilderFactory.get("step1") .chunk(3) - .reader(new ListItemReader<>(Arrays.asList("item1", "item2", "item3","item4", "item5", "item6"))) - .processor(new ItemProcessor() { - @Override - public String process(String item) throws Exception { - return "my_" + item; - } - }) - .writer(new ItemWriter() { - @Override - public void write(List items) throws Exception { - items.forEach(item -> System.out.println(item)); - } - }) + .reader(itemReader()) + .processor(itemProcessor()) + .writer(itemWriter()) .build(); } + @Bean + public ItemReader itemReader() { + return new CustomItemReader(Arrays.asList(new Customer("user1"), new Customer("user2"), new Customer("user3"))); + } + + @Bean + public ItemProcessor itemProcessor() { + return new CustomItemProcessor(); + } + + @Bean + public ItemWriter itemWriter() { + return new CustomItemWriter(); + } + @Bean public Step step2() { return stepBuilderFactory.get("step2") From c8f202695eb37d1abe0ceda30a84a128621551a0 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 20 Jun 2021 16:26:45 +0900 Subject: [PATCH 47/99] spring batch --- ..._Configuration.java => ChunkArchitectureConfiguration.java} | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{ItemReader_ItemProcessor_ItemWriter_Configuration.java => ChunkArchitectureConfiguration.java} (97%) diff --git a/src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java b/src/main/java/io/springbatch/springbatchlecture/ChunkArchitectureConfiguration.java similarity index 97% rename from src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java rename to src/main/java/io/springbatch/springbatchlecture/ChunkArchitectureConfiguration.java index ebd7d60..d228256 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ItemReader_ItemProcessor_ItemWriter_Configuration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ChunkArchitectureConfiguration.java @@ -26,7 +26,7 @@ @RequiredArgsConstructor @Configuration -public class ItemReader_ItemProcessor_ItemWriter_Configuration { +public class ChunkArchitectureConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -40,7 +40,6 @@ public Job job() { } @Bean - @JobScope public Step step1() { return stepBuilderFactory.get("step1") .chunk(3) From 2623620230c6713e1fd9478da8b1e9eace08f745 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Mon, 21 Jun 2021 23:20:50 +0900 Subject: [PATCH 48/99] spring batch --- ...chitectureConfiguration.java => FlatFilesConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{ChunkArchitectureConfiguration.java => FlatFilesConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/ChunkArchitectureConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/ChunkArchitectureConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java index d228256..c09f85f 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ChunkArchitectureConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java @@ -26,7 +26,7 @@ @RequiredArgsConstructor @Configuration -public class ChunkArchitectureConfiguration { +public class FlatFilesConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From cef464bebe774d3445a9c4df82d0d5864d934d51 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Mon, 21 Jun 2021 23:42:44 +0900 Subject: [PATCH 49/99] spring batch --- .../CustomItemProcessor.java | 16 ------------ .../springbatchlecture/CustomItemReader.java | 23 ----------------- .../springbatchlecture/CustomItemWriter.java | 13 ---------- .../springbatchlecture/Customer.java | 6 +++-- .../CustomerFieldSetMapper.java | 18 +++++++++++++ .../springbatchlecture/DefaultLineMapper.java | 25 +++++++++++++++++++ .../FlatFilesConfiguration.java | 15 ----------- 7 files changed, 47 insertions(+), 69 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomItemProcessor.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomItemWriter.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomerFieldSetMapper.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/DefaultLineMapper.java diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomItemProcessor.java b/src/main/java/io/springbatch/springbatchlecture/CustomItemProcessor.java deleted file mode 100644 index e1e99bd..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomItemProcessor.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.item.ItemProcessor; -import org.springframework.batch.item.ItemReader; - -import java.util.ArrayList; -import java.util.List; - -public class CustomItemProcessor implements ItemProcessor { - - @Override - public Customer process(Customer customer) throws Exception { - customer.setName(customer.getName().toUpperCase()); - return null; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java b/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java deleted file mode 100644 index 2bab6da..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.item.ItemReader; - -import java.util.ArrayList; -import java.util.List; - -public class CustomItemReader implements ItemReader { - - private List list; - - public CustomItemReader(List list) { - this.list = new ArrayList<>(list); - } - - @Override - public Customer read() { - if (!list.isEmpty()) { - return list.remove(0); - } - return null; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomItemWriter.java b/src/main/java/io/springbatch/springbatchlecture/CustomItemWriter.java deleted file mode 100644 index 3edafbb..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomItemWriter.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.item.ItemWriter; - -import java.util.List; - -public class CustomItemWriter implements ItemWriter { - - @Override - public void write(List items) throws Exception { - items.forEach(item -> System.out.println(item)); - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index 14b5dfe..e46feba 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -1,10 +1,12 @@ package io.springbatch.springbatchlecture; -import lombok.AllArgsConstructor; import lombok.Data; @Data -@AllArgsConstructor public class Customer { + private String name; + private String year; + private int age; + } diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomerFieldSetMapper.java b/src/main/java/io/springbatch/springbatchlecture/CustomerFieldSetMapper.java new file mode 100644 index 0000000..ff387ba --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomerFieldSetMapper.java @@ -0,0 +1,18 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.item.file.mapping.FieldSetMapper; +import org.springframework.batch.item.file.transform.FieldSet; + +public class CustomerFieldSetMapper implements FieldSetMapper { + + @Override + public Customer mapFieldSet(FieldSet fieldSet) { + Customer customer = new Customer(); + + customer.setName(fieldSet.readString(0)); + customer.setYear(fieldSet.readString(1)); + customer.setAge(fieldSet.readInt(2)); + + return customer; + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/DefaultLineMapper.java b/src/main/java/io/springbatch/springbatchlecture/DefaultLineMapper.java new file mode 100644 index 0000000..85518f3 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/DefaultLineMapper.java @@ -0,0 +1,25 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.item.file.LineMapper; +import org.springframework.batch.item.file.mapping.FieldSetMapper; +import org.springframework.batch.item.file.transform.LineTokenizer; + +public class DefaultLineMapper implements LineMapper { + + private LineTokenizer tokenizer; + + private FieldSetMapper fieldSetMapper; + + + public T mapLine(String line, int lineNumber) throws Exception { + return fieldSetMapper.mapFieldSet(tokenizer.tokenize(line)); + } + + public void setLineTokenizer(LineTokenizer tokenizer) { + this.tokenizer = tokenizer; + } + + public void setFieldSetMapper(FieldSetMapper fieldSetMapper) { + this.fieldSetMapper = fieldSetMapper; + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java index c09f85f..f8e27ba 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java @@ -49,21 +49,6 @@ public Step step1() { .build(); } - @Bean - public ItemReader itemReader() { - return new CustomItemReader(Arrays.asList(new Customer("user1"), new Customer("user2"), new Customer("user3"))); - } - - @Bean - public ItemProcessor itemProcessor() { - return new CustomItemProcessor(); - } - - @Bean - public ItemWriter itemWriter() { - return new CustomItemWriter(); - } - @Bean public Step step2() { return stepBuilderFactory.get("step2") From cbb4d881739c1d123e52ff75b699581e8b627d06 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 11:39:47 +0900 Subject: [PATCH 50/99] spirng batch --- ...a => FlatFilesDelimitedConfiguration.java} | 29 +++++++++++++++++-- src/main/resources/customer.csv | 11 +++++++ 2 files changed, 37 insertions(+), 3 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{FlatFilesConfiguration.java => FlatFilesDelimitedConfiguration.java} (65%) create mode 100644 src/main/resources/customer.csv diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java similarity index 65% rename from src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java index f8e27ba..98ab91c 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java @@ -15,18 +15,22 @@ import org.springframework.batch.item.ItemProcessor; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemWriter; +import org.springframework.batch.item.file.FlatFileItemReader; +import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; +import org.springframework.batch.item.file.transform.DelimitedLineTokenizer; import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; import java.util.Arrays; import java.util.List; @RequiredArgsConstructor @Configuration -public class FlatFilesConfiguration { +public class FlatFilesDelimitedConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -44,11 +48,30 @@ public Step step1() { return stepBuilderFactory.get("step1") .chunk(3) .reader(itemReader()) - .processor(itemProcessor()) - .writer(itemWriter()) + .writer(new ItemWriter() { + @Override + public void write(List items) throws Exception { + items.forEach(item -> System.out.println(item)); + } + }) .build(); } + public FlatFileItemReader itemReader() { + return new FlatFileItemReaderBuilder() + .name("flatFile") + .resource(new ClassPathResource("customer.csv")) + .lineMapper(new DefaultLineMapper<>()) + .fieldSetMapper(new CustomerFieldSetMapper()) + .lineTokenizer(new DelimitedLineTokenizer()) + .targetType(Customer.class) + .linesToSkip(1) + .delimited().delimiter("|") + .names("name","year","age") + .build(); + } + + @Bean public Step step2() { return stepBuilderFactory.get("step2") diff --git a/src/main/resources/customer.csv b/src/main/resources/customer.csv new file mode 100644 index 0000000..efc4b5c --- /dev/null +++ b/src/main/resources/customer.csv @@ -0,0 +1,11 @@ +name,year,age +"user1,1974,48", +"user2,1975,47", +"user3,1976,46", +"user4,1977,45", +"user5,1978,44", +"user6,1979,43", +"user7,1980,42", +"user8,1981,41", +"user9,1982,40", +"user10,1983,39" \ No newline at end of file From 525f6fc3a50bb28d7b672fcb19fe38023f58ccdc Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 14:04:30 +0900 Subject: [PATCH 51/99] spirng batch --- .../springbatchlecture/DefaultLineMapper.java | 25 ------------------- .../FlatFilesDelimitedConfiguration.java | 5 ++-- src/main/resources/customer.csv | 20 +++++++-------- 3 files changed, 12 insertions(+), 38 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/DefaultLineMapper.java diff --git a/src/main/java/io/springbatch/springbatchlecture/DefaultLineMapper.java b/src/main/java/io/springbatch/springbatchlecture/DefaultLineMapper.java deleted file mode 100644 index 85518f3..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/DefaultLineMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.item.file.LineMapper; -import org.springframework.batch.item.file.mapping.FieldSetMapper; -import org.springframework.batch.item.file.transform.LineTokenizer; - -public class DefaultLineMapper implements LineMapper { - - private LineTokenizer tokenizer; - - private FieldSetMapper fieldSetMapper; - - - public T mapLine(String line, int lineNumber) throws Exception { - return fieldSetMapper.mapFieldSet(tokenizer.tokenize(line)); - } - - public void setLineTokenizer(LineTokenizer tokenizer) { - this.tokenizer = tokenizer; - } - - public void setFieldSetMapper(FieldSetMapper fieldSetMapper) { - this.fieldSetMapper = fieldSetMapper; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java index 98ab91c..92cf54f 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java @@ -61,12 +61,11 @@ public FlatFileItemReader itemReader() { return new FlatFileItemReaderBuilder() .name("flatFile") .resource(new ClassPathResource("customer.csv")) - .lineMapper(new DefaultLineMapper<>()) .fieldSetMapper(new CustomerFieldSetMapper()) - .lineTokenizer(new DelimitedLineTokenizer()) +// .lineTokenizer(new DelimitedLineTokenizer()) .targetType(Customer.class) .linesToSkip(1) - .delimited().delimiter("|") + .delimited().delimiter(",") .names("name","year","age") .build(); } diff --git a/src/main/resources/customer.csv b/src/main/resources/customer.csv index efc4b5c..c9c3af0 100644 --- a/src/main/resources/customer.csv +++ b/src/main/resources/customer.csv @@ -1,11 +1,11 @@ name,year,age -"user1,1974,48", -"user2,1975,47", -"user3,1976,46", -"user4,1977,45", -"user5,1978,44", -"user6,1979,43", -"user7,1980,42", -"user8,1981,41", -"user9,1982,40", -"user10,1983,39" \ No newline at end of file +user1,1974,48 +user2,1975,47 +user3,1976,46 +user4,1977,45 +user5,1978,44 +user6,1979,43 +user7,1980,42 +user8,1981,41 +user9,1982,40 +user10,1983,39 \ No newline at end of file From 8f904beec528b617087df1760e0d7ea267571d72 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 14:33:59 +0900 Subject: [PATCH 52/99] spirng batch --- .../springbatchlecture/FlatFilesDelimitedConfiguration.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java index 92cf54f..cd31adf 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java @@ -17,6 +17,7 @@ import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; +import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper; import org.springframework.batch.item.file.transform.DelimitedLineTokenizer; import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.repeat.RepeatStatus; @@ -61,7 +62,8 @@ public FlatFileItemReader itemReader() { return new FlatFileItemReaderBuilder() .name("flatFile") .resource(new ClassPathResource("customer.csv")) - .fieldSetMapper(new CustomerFieldSetMapper()) + .fieldSetMapper(new BeanWrapperFieldSetMapper<>()) +// .fieldSetMapper(new CustomerFieldSetMapper()) // .lineTokenizer(new DelimitedLineTokenizer()) .targetType(Customer.class) .linesToSkip(1) From c8b461fb073cc3e85a2acf350242399ab4c8f4a6 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 14:37:14 +0900 Subject: [PATCH 53/99] spirng batch --- ...onfiguration.java => FlatFilesFixedLengthConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{FlatFilesDelimitedConfiguration.java => FlatFilesFixedLengthConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java index cd31adf..7a12bd5 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesDelimitedConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java @@ -31,7 +31,7 @@ @RequiredArgsConstructor @Configuration -public class FlatFilesDelimitedConfiguration { +public class FlatFilesFixedLengthConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From 9effd1a9295fa74d9c758a14fb27d8560158375f Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 14:57:09 +0900 Subject: [PATCH 54/99] spirng batch --- .../springbatchlecture/FlatFilesFixedLengthConfiguration.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java index 7a12bd5..8e0bb9e 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java @@ -63,8 +63,6 @@ public FlatFileItemReader itemReader() { .name("flatFile") .resource(new ClassPathResource("customer.csv")) .fieldSetMapper(new BeanWrapperFieldSetMapper<>()) -// .fieldSetMapper(new CustomerFieldSetMapper()) -// .lineTokenizer(new DelimitedLineTokenizer()) .targetType(Customer.class) .linesToSkip(1) .delimited().delimiter(",") From 79e69c11cf129ced3880cfa5010c5ee9deefcecc Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 15:12:58 +0900 Subject: [PATCH 55/99] spirng batch --- .../FlatFilesFixedLengthConfiguration.java | 23 +++++-------------- src/main/resources/customer.csv | 11 --------- src/main/resources/customer.txt | 11 +++++++++ 3 files changed, 17 insertions(+), 28 deletions(-) delete mode 100644 src/main/resources/customer.csv create mode 100644 src/main/resources/customer.txt diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java index 8e0bb9e..08278af 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java @@ -3,30 +3,17 @@ import lombok.RequiredArgsConstructor; import org.springframework.batch.core.*; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.JobScope; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepScope; -import org.springframework.batch.core.job.builder.FlowBuilder; -import org.springframework.batch.core.job.flow.Flow; -import org.springframework.batch.core.job.flow.FlowExecutionStatus; -import org.springframework.batch.core.job.flow.JobExecutionDecider; -import org.springframework.batch.core.scope.context.ChunkContext; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.item.ItemProcessor; -import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper; -import org.springframework.batch.item.file.transform.DelimitedLineTokenizer; -import org.springframework.batch.item.support.ListItemReader; +import org.springframework.batch.item.file.transform.Range; import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; -import java.util.Arrays; import java.util.List; @RequiredArgsConstructor @@ -61,16 +48,18 @@ public void write(List items) throws Exception { public FlatFileItemReader itemReader() { return new FlatFileItemReaderBuilder() .name("flatFile") - .resource(new ClassPathResource("customer.csv")) + .resource(new ClassPathResource("customer.txt")) .fieldSetMapper(new BeanWrapperFieldSetMapper<>()) .targetType(Customer.class) .linesToSkip(1) - .delimited().delimiter(",") + .fixedLength() + .addColumns(new Range(1,5)) + .addColumns(new Range(6,9)) + .addColumns(new Range(10,11)) .names("name","year","age") .build(); } - @Bean public Step step2() { return stepBuilderFactory.get("step2") diff --git a/src/main/resources/customer.csv b/src/main/resources/customer.csv deleted file mode 100644 index c9c3af0..0000000 --- a/src/main/resources/customer.csv +++ /dev/null @@ -1,11 +0,0 @@ -name,year,age -user1,1974,48 -user2,1975,47 -user3,1976,46 -user4,1977,45 -user5,1978,44 -user6,1979,43 -user7,1980,42 -user8,1981,41 -user9,1982,40 -user10,1983,39 \ No newline at end of file diff --git a/src/main/resources/customer.txt b/src/main/resources/customer.txt new file mode 100644 index 0000000..b084b33 --- /dev/null +++ b/src/main/resources/customer.txt @@ -0,0 +1,11 @@ +name,year,age +user1197448 +user2197547 +user3197646 +user4197745 +user5197844 +user6197943 +user7198042 +user8198141 +user9198240 +user10198339 \ No newline at end of file From 9f0ed54c76a329876cc44cd046e301271d3de5cb Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 15:14:25 +0900 Subject: [PATCH 56/99] spirng batch --- .../springbatchlecture/FlatFilesFixedLengthConfiguration.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java index 08278af..5f8efa5 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java @@ -56,6 +56,9 @@ public FlatFileItemReader itemReader() { .addColumns(new Range(1,5)) .addColumns(new Range(6,9)) .addColumns(new Range(10,11)) + /*.addColumns(new Range(1)) + .addColumns(new Range(6)) + .addColumns(new Range(10))*/ .names("name","year","age") .build(); } From 4f9e24fd886b8933c9187368ecf5dc70c7114790 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 15:15:36 +0900 Subject: [PATCH 57/99] spirng batch --- .../springbatchlecture/FlatFilesFixedLengthConfiguration.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java index 5f8efa5..b0fb33a 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java @@ -60,6 +60,7 @@ public FlatFileItemReader itemReader() { .addColumns(new Range(6)) .addColumns(new Range(10))*/ .names("name","year","age") + .strict(false) .build(); } From 719672b1524729365af694dced367fef4d136fe0 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 17:45:22 +0900 Subject: [PATCH 58/99] spirng batch --- ...onfiguration.java => ExceptionHandlingConfiguration.java} | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{FlatFilesFixedLengthConfiguration.java => ExceptionHandlingConfiguration.java} (93%) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java similarity index 93% rename from src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java index b0fb33a..f203e4c 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFixedLengthConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java @@ -18,7 +18,7 @@ @RequiredArgsConstructor @Configuration -public class FlatFilesFixedLengthConfiguration { +public class ExceptionHandlingConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -56,9 +56,6 @@ public FlatFileItemReader itemReader() { .addColumns(new Range(1,5)) .addColumns(new Range(6,9)) .addColumns(new Range(10,11)) - /*.addColumns(new Range(1)) - .addColumns(new Range(6)) - .addColumns(new Range(10))*/ .names("name","year","age") .strict(false) .build(); From 09dbda542df3dc39b4efcbeb2d1e17255f5c3763 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 17:56:27 +0900 Subject: [PATCH 59/99] spirng batch --- .../springbatchlecture/ExceptionHandlingConfiguration.java | 2 +- src/main/resources/customer.txt | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java index f203e4c..d6f5e8c 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java @@ -53,11 +53,11 @@ public FlatFileItemReader itemReader() { .targetType(Customer.class) .linesToSkip(1) .fixedLength() + .strict(false) .addColumns(new Range(1,5)) .addColumns(new Range(6,9)) .addColumns(new Range(10,11)) .names("name","year","age") - .strict(false) .build(); } diff --git a/src/main/resources/customer.txt b/src/main/resources/customer.txt index b084b33..7a47396 100644 --- a/src/main/resources/customer.txt +++ b/src/main/resources/customer.txt @@ -1,5 +1,5 @@ name,year,age -user1197448 +user11974481 user2197547 user3197646 user4197745 @@ -7,5 +7,4 @@ user5197844 user6197943 user7198042 user8198141 -user9198240 -user10198339 \ No newline at end of file +user9198240 \ No newline at end of file From 25f3b1f6b6836153c5e9ac63cb94d193e6d20d89 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 17:58:33 +0900 Subject: [PATCH 60/99] spirng batch --- ...xceptionHandlingConfiguration.java => XMLConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{ExceptionHandlingConfiguration.java => XMLConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java index d6f5e8c..769127e 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ExceptionHandlingConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java @@ -18,7 +18,7 @@ @RequiredArgsConstructor @Configuration -public class ExceptionHandlingConfiguration { +public class XMLConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From 950e788280d74ca324ce57a8f419fe3b64283283 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 22 Jun 2021 18:52:24 +0900 Subject: [PATCH 61/99] spirng batch --- .../io/springbatch/springbatchlecture/XMLConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java index 769127e..6cb33c0 100644 --- a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java @@ -48,7 +48,7 @@ public void write(List items) throws Exception { public FlatFileItemReader itemReader() { return new FlatFileItemReaderBuilder() .name("flatFile") - .resource(new ClassPathResource("customer.txt")) + .resource(new ClassPathResource("customer.xml")) .fieldSetMapper(new BeanWrapperFieldSetMapper<>()) .targetType(Customer.class) .linesToSkip(1) From 95b198d5b54f05af5e6c58d97cf6ca360a32b240 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 13:49:45 +0900 Subject: [PATCH 62/99] spirng batch --- pom.xml | 10 ++++++++++ .../springbatchlecture/Customer.java | 12 ------------ .../CustomerFieldSetMapper.java | 18 ------------------ .../springbatchlecture/XMLConfiguration.java | 14 +------------- src/main/resources/customer.txt | 10 ---------- 5 files changed, 11 insertions(+), 53 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/Customer.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomerFieldSetMapper.java delete mode 100644 src/main/resources/customer.txt diff --git a/pom.xml b/pom.xml index 42ddc51..5a471be 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,16 @@ lombok true + + org.springframework + spring-oxm + 5.3.7 + + + com.thoughtworks.xstream + xstream + 1.4.16 + org.springframework.boot spring-boot-starter-test diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java deleted file mode 100644 index e46feba..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.springbatch.springbatchlecture; - -import lombok.Data; - -@Data -public class Customer { - - private String name; - private String year; - private int age; - -} diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomerFieldSetMapper.java b/src/main/java/io/springbatch/springbatchlecture/CustomerFieldSetMapper.java deleted file mode 100644 index ff387ba..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomerFieldSetMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.item.file.mapping.FieldSetMapper; -import org.springframework.batch.item.file.transform.FieldSet; - -public class CustomerFieldSetMapper implements FieldSetMapper { - - @Override - public Customer mapFieldSet(FieldSet fieldSet) { - Customer customer = new Customer(); - - customer.setName(fieldSet.readString(0)); - customer.setYear(fieldSet.readString(1)); - customer.setAge(fieldSet.readInt(2)); - - return customer; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java index 6cb33c0..d9f3644 100644 --- a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java @@ -46,19 +46,7 @@ public void write(List items) throws Exception { } public FlatFileItemReader itemReader() { - return new FlatFileItemReaderBuilder() - .name("flatFile") - .resource(new ClassPathResource("customer.xml")) - .fieldSetMapper(new BeanWrapperFieldSetMapper<>()) - .targetType(Customer.class) - .linesToSkip(1) - .fixedLength() - .strict(false) - .addColumns(new Range(1,5)) - .addColumns(new Range(6,9)) - .addColumns(new Range(10,11)) - .names("name","year","age") - .build(); + return null; } @Bean diff --git a/src/main/resources/customer.txt b/src/main/resources/customer.txt deleted file mode 100644 index 7a47396..0000000 --- a/src/main/resources/customer.txt +++ /dev/null @@ -1,10 +0,0 @@ -name,year,age -user11974481 -user2197547 -user3197646 -user4197745 -user5197844 -user6197943 -user7198042 -user8198141 -user9198240 \ No newline at end of file From b7bbfea77d3264c92dca4d3de3eab0c8fed9fbfe Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 13:51:09 +0900 Subject: [PATCH 63/99] spirng batch --- .../java/io/springbatch/springbatchlecture/XMLConfiguration.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java index d9f3644..7da3a44 100644 --- a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java @@ -59,3 +59,4 @@ public Step step2() { .build(); } } + From aedd02a452f7764d055bde32a4738d021ff7fccd Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 14:28:02 +0900 Subject: [PATCH 64/99] spirng batch --- .../springbatchlecture/Customer.java | 30 +++++++ .../springbatchlecture/XMLConfiguration.java | 84 +++++++++++++------ src/main/resources/customer.xml | 18 ++++ 3 files changed, 108 insertions(+), 24 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/Customer.java create mode 100644 src/main/resources/customer.xml diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java new file mode 100644 index 0000000..caaf9cb --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -0,0 +1,30 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.springbatch.springbatchlecture; + +import lombok.Data; +import lombok.RequiredArgsConstructor; + +import java.util.Date; + +@Data +public class Customer { + + private final long id; + private final String name; + private final int age; + +} \ No newline at end of file diff --git a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java index 7da3a44..1572277 100644 --- a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java @@ -4,17 +4,18 @@ import org.springframework.batch.core.*; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.item.ItemWriter; -import org.springframework.batch.item.file.FlatFileItemReader; -import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; -import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper; -import org.springframework.batch.item.file.transform.Range; -import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.batch.item.xml.StaxEventItemReader; +import org.springframework.batch.item.xml.builder.StaxEventItemReaderBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import org.springframework.oxm.xstream.XStreamMarshaller; -import java.util.List; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; @RequiredArgsConstructor @Configuration @@ -26,37 +27,72 @@ public class XMLConfiguration { @Bean public Job job() { return jobBuilderFactory.get("batchJob") + .incrementer(new RunIdIncrementer()) .start(step1()) - .next(step2()) .build(); } @Bean public Step step1() { return stepBuilderFactory.get("step1") - .chunk(3) - .reader(itemReader()) - .writer(new ItemWriter() { - @Override - public void write(List items) throws Exception { - items.forEach(item -> System.out.println(item)); - } - }) + .chunk(3) + .reader(customItemReader()) + .writer(customItemWriter()) .build(); } - public FlatFileItemReader itemReader() { - return null; + @Bean + public StaxEventItemReader customItemReader() { + return new StaxEventItemReaderBuilder() + .name("xmlFileItemReader") + .resource(new ClassPathResource("customer.xml")) + .addFragmentRootElements("customer") + .unmarshaller(itemMarshaller()) + .build(); } + /*@Bean + public StaxEventItemReader customItemReader() { + + XStreamMarshaller unmarshaller = new XStreamMarshaller(); + + Map aliases = new HashMap<>(); + aliases.put("customer", Customer.class); + aliases.put("id", Long.class); + aliases.put("firstName", String.class); + aliases.put("lastName", String.class); + aliases.put("birthdate", Date.class); + + unmarshaller.setAliases(aliases); + + StaxEventItemReader reader = new StaxEventItemReader<>(); + + reader.setResource(new ClassPathResource("customers.xml")); + reader.setFragmentRootElementName("customer"); + reader.setUnmarshaller(unmarshaller); + + return reader; + }*/ + @Bean - public Step step2() { - return stepBuilderFactory.get("step2") - .tasklet((contribution, chunkContext) -> { - System.out.println("step2 has executed"); - return RepeatStatus.FINISHED; - }) - .build(); + public ItemWriter customItemWriter() { + return items -> { + for (Customer item : items) { + System.out.println(item.toString()); + } + }; + } + + @Bean + public XStreamMarshaller itemMarshaller() { + Map> aliases = new HashMap<>(); + aliases.put("customer", Customer.class); + aliases.put("id", Long.class); + aliases.put("name", String.class); + aliases.put("age", Integer.class); + XStreamMarshaller xStreamMarshaller = new XStreamMarshaller(); + xStreamMarshaller.setAliases(aliases); + return xStreamMarshaller; } } diff --git a/src/main/resources/customer.xml b/src/main/resources/customer.xml new file mode 100644 index 0000000..3ceaca5 --- /dev/null +++ b/src/main/resources/customer.xml @@ -0,0 +1,18 @@ + + + + 1 + hong gil dong1 + 40 + + + 2 + hong gil dong2 + 42 + + + 3 + hong gil dong3 + 43 + + \ No newline at end of file From 97a168170cbd4a7e91174fd158ff2910f360a759 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 15:20:37 +0900 Subject: [PATCH 65/99] spirng batch --- ...figuration.java => JsonConfiguration.java} | 51 ++++--------------- src/main/resources/customer.json | 17 +++++++ src/main/resources/customer.xml | 18 ------- 3 files changed, 26 insertions(+), 60 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{XMLConfiguration.java => JsonConfiguration.java} (52%) create mode 100644 src/main/resources/customer.json delete mode 100644 src/main/resources/customer.xml diff --git a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java similarity index 52% rename from src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java index 1572277..3890031 100644 --- a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java @@ -6,6 +6,9 @@ import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.item.ItemWriter; +import org.springframework.batch.item.json.JacksonJsonObjectReader; +import org.springframework.batch.item.json.JsonItemReader; +import org.springframework.batch.item.json.builder.JsonItemReaderBuilder; import org.springframework.batch.item.xml.StaxEventItemReader; import org.springframework.batch.item.xml.builder.StaxEventItemReaderBuilder; import org.springframework.context.annotation.Bean; @@ -19,7 +22,7 @@ @RequiredArgsConstructor @Configuration -public class XMLConfiguration { +public class JsonConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -42,38 +45,14 @@ public Step step1() { } @Bean - public StaxEventItemReader customItemReader() { - return new StaxEventItemReaderBuilder() - .name("xmlFileItemReader") - .resource(new ClassPathResource("customer.xml")) - .addFragmentRootElements("customer") - .unmarshaller(itemMarshaller()) + public JsonItemReader customItemReader(){ + return new JsonItemReaderBuilder() + .jsonObjectReader(new JacksonJsonObjectReader<>(Customer.class)) + .resource(new ClassPathResource("/customer.json")) + .name("jsonItemReader") .build(); } - /*@Bean - public StaxEventItemReader customItemReader() { - - XStreamMarshaller unmarshaller = new XStreamMarshaller(); - - Map aliases = new HashMap<>(); - aliases.put("customer", Customer.class); - aliases.put("id", Long.class); - aliases.put("firstName", String.class); - aliases.put("lastName", String.class); - aliases.put("birthdate", Date.class); - - unmarshaller.setAliases(aliases); - - StaxEventItemReader reader = new StaxEventItemReader<>(); - - reader.setResource(new ClassPathResource("customers.xml")); - reader.setFragmentRootElementName("customer"); - reader.setUnmarshaller(unmarshaller); - - return reader; - }*/ - @Bean public ItemWriter customItemWriter() { return items -> { @@ -82,17 +61,5 @@ public ItemWriter customItemWriter() { } }; } - - @Bean - public XStreamMarshaller itemMarshaller() { - Map> aliases = new HashMap<>(); - aliases.put("customer", Customer.class); - aliases.put("id", Long.class); - aliases.put("name", String.class); - aliases.put("age", Integer.class); - XStreamMarshaller xStreamMarshaller = new XStreamMarshaller(); - xStreamMarshaller.setAliases(aliases); - return xStreamMarshaller; - } } diff --git a/src/main/resources/customer.json b/src/main/resources/customer.json new file mode 100644 index 0000000..1ea4379 --- /dev/null +++ b/src/main/resources/customer.json @@ -0,0 +1,17 @@ +[ + { + "id" : 1, + "name" : "hong gil dong1", + "age" : 41 + }, + { + "id" : 2, + "name" : "hong gil dong2", + "age" : 42 + }, + { + "id" : 3, + "name" : "hong gil dong3", + "age" : 43 + } +] \ No newline at end of file diff --git a/src/main/resources/customer.xml b/src/main/resources/customer.xml deleted file mode 100644 index 3ceaca5..0000000 --- a/src/main/resources/customer.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - 1 - hong gil dong1 - 40 - - - 2 - hong gil dong2 - 42 - - - 3 - hong gil dong3 - 43 - - \ No newline at end of file From 4295a2896640ab643120e46d6f9ee8e87b39d5d9 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 15:20:51 +0900 Subject: [PATCH 66/99] spirng batch --- .../io/springbatch/springbatchlecture/JsonConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java index 3890031..a6c5258 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java @@ -48,7 +48,7 @@ public Step step1() { public JsonItemReader customItemReader(){ return new JsonItemReaderBuilder() .jsonObjectReader(new JacksonJsonObjectReader<>(Customer.class)) - .resource(new ClassPathResource("/customer.json")) + .resource(new ClassPathResource("customer.json")) .name("jsonItemReader") .build(); } From 398f6dd526182e5e02c65d5e53d48ab325e62862 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 15:21:42 +0900 Subject: [PATCH 67/99] spirng batch --- .../java/io/springbatch/springbatchlecture/Customer.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index caaf9cb..073f39a 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -16,15 +16,17 @@ package io.springbatch.springbatchlecture; import lombok.Data; +import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; import java.util.Date; @Data +@NoArgsConstructor public class Customer { - private final long id; - private final String name; - private final int age; + private long id; + private String name; + private int age; } \ No newline at end of file From 9cfc48d3f130c14b700c8cc80671fc179aaf4348 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 15:23:05 +0900 Subject: [PATCH 68/99] spirng batch --- .../{JsonConfiguration.java => JdbcCursorConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{JsonConfiguration.java => JdbcCursorConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java index a6c5258..d466ecf 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java @@ -22,7 +22,7 @@ @RequiredArgsConstructor @Configuration -public class JsonConfiguration { +public class JdbcCursorConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From eb18542f0e428814266b4934dfde07a67dd0fa85 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 16:00:17 +0900 Subject: [PATCH 69/99] spirng batch --- .../springbatchlecture/Customer.java | 24 +++++-------------- .../JdbcCursorConfiguration.java | 22 +++++++++++++---- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index 073f39a..6080e08 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -1,20 +1,6 @@ -/* - * Copyright 2015 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package io.springbatch.springbatchlecture; +import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; @@ -23,10 +9,12 @@ @Data @NoArgsConstructor +@AllArgsConstructor public class Customer { - private long id; - private String name; - private int age; + private Long Id; + private String firstName; + private String lastName; + private String birthdate; } \ No newline at end of file diff --git a/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java index d466ecf..a3a4e3c 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java @@ -6,16 +6,21 @@ import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.item.ItemWriter; +import org.springframework.batch.item.database.JdbcCursorItemReader; +import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder; import org.springframework.batch.item.json.JacksonJsonObjectReader; import org.springframework.batch.item.json.JsonItemReader; import org.springframework.batch.item.json.builder.JsonItemReaderBuilder; import org.springframework.batch.item.xml.StaxEventItemReader; import org.springframework.batch.item.xml.builder.StaxEventItemReaderBuilder; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.oxm.xstream.XStreamMarshaller; +import javax.sql.DataSource; +import java.sql.Types; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -26,6 +31,7 @@ public class JdbcCursorConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; + private final DataSource dataSource; @Bean public Job job() { @@ -45,11 +51,17 @@ public Step step1() { } @Bean - public JsonItemReader customItemReader(){ - return new JsonItemReaderBuilder() - .jsonObjectReader(new JacksonJsonObjectReader<>(Customer.class)) - .resource(new ClassPathResource("customer.json")) - .name("jsonItemReader") + public JdbcCursorItemReader customItemReader() { + return new JdbcCursorItemReaderBuilder() + .name("jdbcCursorItemReader") + .fetchSize(10) + .sql("select id, firstName, lastName, birthdate from customer where firstName like ? order by lastName, firstName") + .beanRowMapper(Customer.class) + .queryArguments(new String[]{"A%"}, new int[]{Types.VARCHAR}) + .maxItemCount(20) + .currentItemCount(5) + .maxRows(100) + .dataSource(dataSource) .build(); } From 9fbdf829ab5626394a173978c56c61ad45de45f9 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 16:01:22 +0900 Subject: [PATCH 70/99] spirng batch --- .../springbatchlecture/JdbcCursorConfiguration.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java index a3a4e3c..83bec46 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java @@ -58,9 +58,9 @@ public JdbcCursorItemReader customItemReader() { .sql("select id, firstName, lastName, birthdate from customer where firstName like ? order by lastName, firstName") .beanRowMapper(Customer.class) .queryArguments(new String[]{"A%"}, new int[]{Types.VARCHAR}) - .maxItemCount(20) - .currentItemCount(5) - .maxRows(100) +// .maxItemCount(20) +// .currentItemCount(5) +// .maxRows(100) .dataSource(dataSource) .build(); } From 1a35c0cd755fef333f427adfa1de78abbcb3d429 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 16:03:44 +0900 Subject: [PATCH 71/99] spirng batch --- ...JdbcCursorConfiguration.java => JpaCursorConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{JdbcCursorConfiguration.java => JpaCursorConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java index 83bec46..44e913d 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JdbcCursorConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java @@ -27,7 +27,7 @@ @RequiredArgsConstructor @Configuration -public class JdbcCursorConfiguration { +public class JpaCursorConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From d43ef26a2629af6ebc3caad2d605c6cb80b19054 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 16:08:51 +0900 Subject: [PATCH 72/99] spirng batch --- pom.xml | 4 +++ .../springbatchlecture/Customer.java | 11 ++++++-- .../JpaCursorConfiguration.java | 28 +++++++++++-------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 5a471be..7445dab 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,10 @@ org.springframework.boot spring-boot-starter-batch + + org.springframework.boot + spring-boot-starter-data-jpa + mysql mysql-connector-java diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index 6080e08..fb87f4d 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -5,16 +5,21 @@ import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; import java.util.Date; @Data @NoArgsConstructor @AllArgsConstructor +@Entity public class Customer { + @Id + @GeneratedValue private Long Id; - private String firstName; - private String lastName; + private String firstname; + private String lastname; private String birthdate; - } \ No newline at end of file diff --git a/src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java index 44e913d..067b4b9 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java @@ -7,7 +7,9 @@ import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.database.JdbcCursorItemReader; +import org.springframework.batch.item.database.JpaCursorItemReader; import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder; +import org.springframework.batch.item.database.builder.JpaCursorItemReaderBuilder; import org.springframework.batch.item.json.JacksonJsonObjectReader; import org.springframework.batch.item.json.JsonItemReader; import org.springframework.batch.item.json.builder.JsonItemReaderBuilder; @@ -19,6 +21,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.oxm.xstream.XStreamMarshaller; +import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; import java.sql.Types; import java.util.Date; @@ -31,7 +34,7 @@ public class JpaCursorConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - private final DataSource dataSource; + private final EntityManagerFactory entityManagerFactory; @Bean public Job job() { @@ -51,17 +54,18 @@ public Step step1() { } @Bean - public JdbcCursorItemReader customItemReader() { - return new JdbcCursorItemReaderBuilder() - .name("jdbcCursorItemReader") - .fetchSize(10) - .sql("select id, firstName, lastName, birthdate from customer where firstName like ? order by lastName, firstName") - .beanRowMapper(Customer.class) - .queryArguments(new String[]{"A%"}, new int[]{Types.VARCHAR}) -// .maxItemCount(20) -// .currentItemCount(5) -// .maxRows(100) - .dataSource(dataSource) + public JpaCursorItemReader customItemReader() { + + HashMap parameters = new HashMap<>(); + parameters.put("firstname", "A%"); + + return new JpaCursorItemReaderBuilder() + .name("jpaCursorItemReader") + .queryString("select c from Customer c where firstname like :firstname") + .entityManagerFactory(entityManagerFactory) + .parameterValues(parameters) +// .maxItemCount(10) +// .currentItemCount(2) .build(); } From dad450d5b845a3e2294715c23420a324964254a7 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 16:32:31 +0900 Subject: [PATCH 73/99] spirng batch --- ...tion.java => JdbcPagingConfiguration.java} | 47 +++++++++++++------ 1 file changed, 33 insertions(+), 14 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{JpaCursorConfiguration.java => JdbcPagingConfiguration.java} (59%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JdbcPagingConfiguration.java similarity index 59% rename from src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JdbcPagingConfiguration.java index 067b4b9..39f7a99 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JpaCursorConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JdbcPagingConfiguration.java @@ -6,10 +6,11 @@ import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.item.ItemWriter; -import org.springframework.batch.item.database.JdbcCursorItemReader; -import org.springframework.batch.item.database.JpaCursorItemReader; +import org.springframework.batch.item.database.*; import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder; +import org.springframework.batch.item.database.builder.JdbcPagingItemReaderBuilder; import org.springframework.batch.item.database.builder.JpaCursorItemReaderBuilder; +import org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean; import org.springframework.batch.item.json.JacksonJsonObjectReader; import org.springframework.batch.item.json.JsonItemReader; import org.springframework.batch.item.json.builder.JsonItemReaderBuilder; @@ -19,6 +20,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.oxm.xstream.XStreamMarshaller; import javax.persistence.EntityManagerFactory; @@ -30,14 +32,14 @@ @RequiredArgsConstructor @Configuration -public class JpaCursorConfiguration { +public class JdbcPagingConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - private final EntityManagerFactory entityManagerFactory; + public final DataSource dataSource; @Bean - public Job job() { + public Job job() throws Exception { return jobBuilderFactory.get("batchJob") .incrementer(new RunIdIncrementer()) .start(step1()) @@ -45,7 +47,7 @@ public Job job() { } @Bean - public Step step1() { + public Step step1() throws Exception { return stepBuilderFactory.get("step1") .chunk(3) .reader(customItemReader()) @@ -54,21 +56,38 @@ public Step step1() { } @Bean - public JpaCursorItemReader customItemReader() { + public JdbcPagingItemReader customItemReader() throws Exception { HashMap parameters = new HashMap<>(); parameters.put("firstname", "A%"); - return new JpaCursorItemReaderBuilder() - .name("jpaCursorItemReader") - .queryString("select c from Customer c where firstname like :firstname") - .entityManagerFactory(entityManagerFactory) - .parameterValues(parameters) -// .maxItemCount(10) -// .currentItemCount(2) + return new JdbcPagingItemReaderBuilder() + .name("jdbcPagingItemReader") + .pageSize(10) + .fetchSize(10) + .dataSource(dataSource) + .rowMapper(new BeanPropertyRowMapper<>(Customer.class)) + .queryProvider(createQueryProvider()) + .parameterValues(parameters) .build(); } + @Bean + public PagingQueryProvider createQueryProvider() throws Exception { + SqlPagingQueryProviderFactoryBean queryProvider = new SqlPagingQueryProviderFactoryBean(); + queryProvider.setDataSource(dataSource); // Database에 맞는 PagingQueryProvider를 선택하기 위해 + queryProvider.setSelectClause("id, firstName, lastName, birthdate"); + queryProvider.setFromClause("from customer"); + queryProvider.setWhereClause("where firstname like :firstname"); + + Map sortKeys = new HashMap<>(1); + sortKeys.put("id", Order.ASCENDING); + + queryProvider.setSortKeys(sortKeys); + + return queryProvider.getObject(); + } + @Bean public ItemWriter customItemWriter() { return items -> { From a4dca79d0dfe202f3a91f16a27ca9b3c6c4a2f6d Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 16:35:37 +0900 Subject: [PATCH 74/99] spirng batch --- ...JdbcPagingConfiguration.java => JpaPagingConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{JdbcPagingConfiguration.java => JpaPagingConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JdbcPagingConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/JdbcPagingConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java index 39f7a99..88fef7d 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JdbcPagingConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java @@ -32,7 +32,7 @@ @RequiredArgsConstructor @Configuration -public class JdbcPagingConfiguration { +public class JpaPagingConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From fd341153fa0933fbf51709e1087d9d1b937bc7c2 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 16:57:45 +0900 Subject: [PATCH 75/99] spirng batch --- .../JpaPagingConfiguration.java | 39 +++++-------------- 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java index 88fef7d..4554cb6 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java @@ -10,6 +10,7 @@ import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder; import org.springframework.batch.item.database.builder.JdbcPagingItemReaderBuilder; import org.springframework.batch.item.database.builder.JpaCursorItemReaderBuilder; +import org.springframework.batch.item.database.builder.JpaPagingItemReaderBuilder; import org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean; import org.springframework.batch.item.json.JacksonJsonObjectReader; import org.springframework.batch.item.json.JsonItemReader; @@ -17,6 +18,7 @@ import org.springframework.batch.item.xml.StaxEventItemReader; import org.springframework.batch.item.xml.builder.StaxEventItemReaderBuilder; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.CustomAutowireConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; @@ -36,7 +38,7 @@ public class JpaPagingConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - public final DataSource dataSource; + private final EntityManagerFactory entityManagerFactory; @Bean public Job job() throws Exception { @@ -49,45 +51,22 @@ public Job job() throws Exception { @Bean public Step step1() throws Exception { return stepBuilderFactory.get("step1") - .chunk(3) + .chunk(10) .reader(customItemReader()) .writer(customItemWriter()) .build(); } @Bean - public JdbcPagingItemReader customItemReader() throws Exception { - - HashMap parameters = new HashMap<>(); - parameters.put("firstname", "A%"); - - return new JdbcPagingItemReaderBuilder() - .name("jdbcPagingItemReader") + public JpaPagingItemReader customItemReader() { + return new JpaPagingItemReaderBuilder() + .name("jpaPagingItemReader") + .entityManagerFactory(entityManagerFactory) .pageSize(10) - .fetchSize(10) - .dataSource(dataSource) - .rowMapper(new BeanPropertyRowMapper<>(Customer.class)) - .queryProvider(createQueryProvider()) - .parameterValues(parameters) + .queryString("SELECT p FROM Pay p WHERE amount >= 2000") .build(); } - @Bean - public PagingQueryProvider createQueryProvider() throws Exception { - SqlPagingQueryProviderFactoryBean queryProvider = new SqlPagingQueryProviderFactoryBean(); - queryProvider.setDataSource(dataSource); // Database에 맞는 PagingQueryProvider를 선택하기 위해 - queryProvider.setSelectClause("id, firstName, lastName, birthdate"); - queryProvider.setFromClause("from customer"); - queryProvider.setWhereClause("where firstname like :firstname"); - - Map sortKeys = new HashMap<>(1); - sortKeys.put("id", Order.ASCENDING); - - queryProvider.setSortKeys(sortKeys); - - return queryProvider.getObject(); - } - @Bean public ItemWriter customItemWriter() { return items -> { From 3d463b1595aa0d141399c832d3e03a3ec448dc5b Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 17:01:24 +0900 Subject: [PATCH 76/99] spirng batch --- .../springbatchlecture/JpaPagingConfiguration.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java index 4554cb6..9a22ccb 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java @@ -59,11 +59,16 @@ public Step step1() throws Exception { @Bean public JpaPagingItemReader customItemReader() { + + HashMap parameters = new HashMap<>(); + parameters.put("firstname", "A%"); + return new JpaPagingItemReaderBuilder() .name("jpaPagingItemReader") .entityManagerFactory(entityManagerFactory) .pageSize(10) - .queryString("SELECT p FROM Pay p WHERE amount >= 2000") + .queryString("select c from Customer c where firstname like :firstname") + .parameterValues(parameters) .build(); } From af3c9a79974d83e70e12367196f6b2869155c47b Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 17:07:41 +0900 Subject: [PATCH 77/99] spirng batch --- ...ngConfiguration.java => ItemReaderAdapterConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{JpaPagingConfiguration.java => ItemReaderAdapterConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java index 9a22ccb..2e96bda 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JpaPagingConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java @@ -34,7 +34,7 @@ @RequiredArgsConstructor @Configuration -public class JpaPagingConfiguration { +public class ItemReaderAdapterConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From b4185a103087bfa6f7389a2dc53739442f03869f Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 17:13:54 +0900 Subject: [PATCH 78/99] spirng batch --- .../springbatchlecture/CustomService.java | 8 ++++++++ .../springbatchlecture/Customer.java | 3 --- .../ItemReaderAdapterConfiguration.java | 20 +++++++++---------- 3 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomService.java diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomService.java b/src/main/java/io/springbatch/springbatchlecture/CustomService.java new file mode 100644 index 0000000..0f9219e --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomService.java @@ -0,0 +1,8 @@ +package io.springbatch.springbatchlecture; + +public class CustomService { + + public void joinCustomer(){ + System.out.println("joined"); + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index fb87f4d..f364bf2 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -13,11 +13,8 @@ @Data @NoArgsConstructor @AllArgsConstructor -@Entity public class Customer { - @Id - @GeneratedValue private Long Id; private String firstname; private String lastname; diff --git a/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java index 2e96bda..63c0d2b 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java @@ -6,6 +6,7 @@ import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.item.ItemWriter; +import org.springframework.batch.item.adapter.ItemReaderAdapter; import org.springframework.batch.item.database.*; import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder; import org.springframework.batch.item.database.builder.JdbcPagingItemReaderBuilder; @@ -58,18 +59,17 @@ public Step step1() throws Exception { } @Bean - public JpaPagingItemReader customItemReader() { + public ItemReaderAdapter customItemReader() { - HashMap parameters = new HashMap<>(); - parameters.put("firstname", "A%"); + ItemReaderAdapter reader = new ItemReaderAdapter(); + reader.setTargetObject(customService()); + reader.setTargetMethod("joinCustomer"); - return new JpaPagingItemReaderBuilder() - .name("jpaPagingItemReader") - .entityManagerFactory(entityManagerFactory) - .pageSize(10) - .queryString("select c from Customer c where firstname like :firstname") - .parameterValues(parameters) - .build(); + return reader; + } + + private CustomService customService() { + return new CustomService(); } @Bean From 39f6e828f50f36fbc09906f294b4cdb43c4a836b Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 17:16:05 +0900 Subject: [PATCH 79/99] spirng batch --- .../springbatchlecture/Customer.java | 22 ------------------- .../ItemReaderAdapterConfiguration.java | 8 +++---- 2 files changed, 3 insertions(+), 27 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/Customer.java diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java deleted file mode 100644 index f364bf2..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.springbatch.springbatchlecture; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import java.util.Date; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class Customer { - - private Long Id; - private String firstname; - private String lastname; - private String birthdate; -} \ No newline at end of file diff --git a/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java index 63c0d2b..45ea96c 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java @@ -52,7 +52,7 @@ public Job job() throws Exception { @Bean public Step step1() throws Exception { return stepBuilderFactory.get("step1") - .chunk(10) + .chunk(10) .reader(customItemReader()) .writer(customItemWriter()) .build(); @@ -73,11 +73,9 @@ private CustomService customService() { } @Bean - public ItemWriter customItemWriter() { + public ItemWriter customItemWriter() { return items -> { - for (Customer item : items) { - System.out.println(item.toString()); - } + System.out.println(items); }; } } From e5ddf20416c69764c755396d4ed3f46dfd8ba47e Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 17:17:48 +0900 Subject: [PATCH 80/99] spirng batch --- .../java/io/springbatch/springbatchlecture/CustomService.java | 2 +- .../springbatchlecture/ItemReaderAdapterConfiguration.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomService.java b/src/main/java/io/springbatch/springbatchlecture/CustomService.java index 0f9219e..81d1f55 100644 --- a/src/main/java/io/springbatch/springbatchlecture/CustomService.java +++ b/src/main/java/io/springbatch/springbatchlecture/CustomService.java @@ -3,6 +3,6 @@ public class CustomService { public void joinCustomer(){ - System.out.println("joined"); + System.out.println(">> customer is joined"); } } diff --git a/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java index 45ea96c..374ca77 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java @@ -39,7 +39,6 @@ public class ItemReaderAdapterConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - private final EntityManagerFactory entityManagerFactory; @Bean public Job job() throws Exception { From bfe09f858e5031275e08788b8a7bfb5d50dab7f5 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 17:18:34 +0900 Subject: [PATCH 81/99] spirng batch --- .../java/io/springbatch/springbatchlecture/CustomService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomService.java b/src/main/java/io/springbatch/springbatchlecture/CustomService.java index 81d1f55..db184ae 100644 --- a/src/main/java/io/springbatch/springbatchlecture/CustomService.java +++ b/src/main/java/io/springbatch/springbatchlecture/CustomService.java @@ -3,6 +3,6 @@ public class CustomService { public void joinCustomer(){ - System.out.println(">> customer is joined"); + System.out.println(">> Customer is joined"); } } From 4cbc828ec5ff23066b01641d4207119646957882 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 17:26:07 +0900 Subject: [PATCH 82/99] spirng batch --- ...derAdapterConfiguration.java => FlatFilesConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{ItemReaderAdapterConfiguration.java => FlatFilesConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java index 374ca77..5dca00e 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ItemReaderAdapterConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java @@ -35,7 +35,7 @@ @RequiredArgsConstructor @Configuration -public class ItemReaderAdapterConfiguration { +public class FlatFilesConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From de13fda92a050e7a5b1e69d47259a74ddd1b0a7b Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 18:28:51 +0900 Subject: [PATCH 83/99] spirng batch --- .../springbatchlecture/CustomItemReader.java | 25 +++++++++++++++++++ .../springbatchlecture/CustomService.java | 8 ------ .../springbatchlecture/Customer.java | 15 +++++++++++ .../FlatFilesConfiguration.java | 17 +++++-------- 4 files changed, 46 insertions(+), 19 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomService.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/Customer.java diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java b/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java new file mode 100644 index 0000000..688a37a --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java @@ -0,0 +1,25 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.item.ItemReader; +import org.springframework.batch.item.NonTransientResourceException; +import org.springframework.batch.item.ParseException; +import org.springframework.batch.item.UnexpectedInputException; + +import java.util.List; + +public class CustomItemReader implements ItemReader { + + List items; + + public CustomItemReader(List items) { + this.items = items; + } + + public T read() throws Exception, UnexpectedInputException, NonTransientResourceException, ParseException { + + if (!items.isEmpty()) { + return items.remove(0); + } + return null; + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomService.java b/src/main/java/io/springbatch/springbatchlecture/CustomService.java deleted file mode 100644 index db184ae..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomService.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.springbatch.springbatchlecture; - -public class CustomService { - - public void joinCustomer(){ - System.out.println(">> Customer is joined"); - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java new file mode 100644 index 0000000..65a1aba --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -0,0 +1,15 @@ + +package io.springbatch.springbatchlecture; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class Customer { + + private long id; + private String name; + private int age; + +} diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java index 5dca00e..85ae73e 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java @@ -29,9 +29,7 @@ import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; import java.sql.Types; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; +import java.util.*; @RequiredArgsConstructor @Configuration @@ -58,19 +56,16 @@ public Step step1() throws Exception { } @Bean - public ItemReaderAdapter customItemReader() { + public CustomItemReader customItemReader() { - ItemReaderAdapter reader = new ItemReaderAdapter(); - reader.setTargetObject(customService()); - reader.setTargetMethod("joinCustomer"); + List customers = Arrays.asList(new Customer(1, "hong gil dong1", 41), + new Customer(2, "hong gil dong2", 42), + new Customer(3, "hong gil dong3", 43)); + CustomItemReader reader = new CustomItemReader(customers); return reader; } - private CustomService customService() { - return new CustomService(); - } - @Bean public ItemWriter customItemWriter() { return items -> { From 79c1d7968f89ce5bd8900aeb6783f185d4660f7a Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 18:35:14 +0900 Subject: [PATCH 84/99] spirng batch --- .../FlatFilesConfiguration.java | 15 +++++++++++---- src/main/resources/customer.json | 17 ----------------- 2 files changed, 11 insertions(+), 21 deletions(-) delete mode 100644 src/main/resources/customer.json diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java index 85ae73e..a861728 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java @@ -13,6 +13,8 @@ import org.springframework.batch.item.database.builder.JpaCursorItemReaderBuilder; import org.springframework.batch.item.database.builder.JpaPagingItemReaderBuilder; import org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean; +import org.springframework.batch.item.file.FlatFileItemWriter; +import org.springframework.batch.item.file.builder.FlatFileItemWriterBuilder; import org.springframework.batch.item.json.JacksonJsonObjectReader; import org.springframework.batch.item.json.JsonItemReader; import org.springframework.batch.item.json.builder.JsonItemReaderBuilder; @@ -23,6 +25,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.FileSystemResource; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.oxm.xstream.XStreamMarshaller; @@ -67,10 +70,14 @@ public CustomItemReader customItemReader() { } @Bean - public ItemWriter customItemWriter() { - return items -> { - System.out.println(items); - }; + public FlatFileItemWriter customItemWriter() throws Exception { + return new FlatFileItemWriterBuilder() + .name("customerWriter") + .resource(new ClassPathResource("customer.csv")) + .delimited() + .delimiter("|") + .names(new String[] {"id", "name", "age"}) + .build(); } } diff --git a/src/main/resources/customer.json b/src/main/resources/customer.json deleted file mode 100644 index 1ea4379..0000000 --- a/src/main/resources/customer.json +++ /dev/null @@ -1,17 +0,0 @@ -[ - { - "id" : 1, - "name" : "hong gil dong1", - "age" : 41 - }, - { - "id" : 2, - "name" : "hong gil dong2", - "age" : 42 - }, - { - "id" : 3, - "name" : "hong gil dong3", - "age" : 43 - } -] \ No newline at end of file From b26c4413c8d9505ec9ebc1ef2c278176a66df2d6 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 19:05:51 +0900 Subject: [PATCH 85/99] spirng batch --- .../springbatchlecture/CustomItemReader.java | 25 ----------------- .../FlatFilesConfiguration.java | 28 +++++++++++++++++-- src/main/resources/customer.csv | 0 3 files changed, 25 insertions(+), 28 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java create mode 100644 src/main/resources/customer.csv diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java b/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java deleted file mode 100644 index 688a37a..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomItemReader.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.item.ItemReader; -import org.springframework.batch.item.NonTransientResourceException; -import org.springframework.batch.item.ParseException; -import org.springframework.batch.item.UnexpectedInputException; - -import java.util.List; - -public class CustomItemReader implements ItemReader { - - List items; - - public CustomItemReader(List items) { - this.items = items; - } - - public T read() throws Exception, UnexpectedInputException, NonTransientResourceException, ParseException { - - if (!items.isEmpty()) { - return items.remove(0); - } - return null; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java index a861728..87c489a 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java @@ -15,9 +15,12 @@ import org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean; import org.springframework.batch.item.file.FlatFileItemWriter; import org.springframework.batch.item.file.builder.FlatFileItemWriterBuilder; +import org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor; +import org.springframework.batch.item.file.transform.DelimitedLineAggregator; import org.springframework.batch.item.json.JacksonJsonObjectReader; import org.springframework.batch.item.json.JsonItemReader; import org.springframework.batch.item.json.builder.JsonItemReaderBuilder; +import org.springframework.batch.item.support.ListItemReader; import org.springframework.batch.item.xml.StaxEventItemReader; import org.springframework.batch.item.xml.builder.StaxEventItemReaderBuilder; import org.springframework.beans.factory.annotation.Autowired; @@ -26,6 +29,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.Resource; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.oxm.xstream.XStreamMarshaller; @@ -59,23 +63,41 @@ public Step step1() throws Exception { } @Bean - public CustomItemReader customItemReader() { + public ListItemReader customItemReader() { List customers = Arrays.asList(new Customer(1, "hong gil dong1", 41), new Customer(2, "hong gil dong2", 42), new Customer(3, "hong gil dong3", 43)); - CustomItemReader reader = new CustomItemReader(customers); + ListItemReader reader = new ListItemReader<>(customers); return reader; } + /*@Bean + public FlatFileItemWriter customItemWriter() throws Exception { + + BeanWrapperFieldExtractor fieldExtractor = new BeanWrapperFieldExtractor<>(); + fieldExtractor.setNames(new String[] {"id","name","age"}); + fieldExtractor.afterPropertiesSet(); + + DelimitedLineAggregator lineAggregator = new DelimitedLineAggregator<>(); + lineAggregator.setDelimiter(","); + lineAggregator.setFieldExtractor(fieldExtractor); + + return new FlatFileItemWriterBuilder() + .name("CustomerWriter") + .resource(new ClassPathResource("customer.csv")) + .lineAggregator(lineAggregator) + .build(); + }*/ + @Bean public FlatFileItemWriter customItemWriter() throws Exception { return new FlatFileItemWriterBuilder() .name("customerWriter") .resource(new ClassPathResource("customer.csv")) .delimited() - .delimiter("|") + .delimiter(",") .names(new String[] {"id", "name", "age"}) .build(); } diff --git a/src/main/resources/customer.csv b/src/main/resources/customer.csv new file mode 100644 index 0000000..e69de29 From 85fab5cd76db406f974dbf0671d73b340627b7ae Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 19:07:37 +0900 Subject: [PATCH 86/99] spirng batch --- ...sConfiguration.java => FlatFilesFormattedConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{FlatFilesConfiguration.java => FlatFilesFormattedConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java index 87c489a..67ddc08 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java @@ -40,7 +40,7 @@ @RequiredArgsConstructor @Configuration -public class FlatFilesConfiguration { +public class FlatFilesFormattedConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From 63d3a5b26ba4884f4b147842fcffdca72cbc40d7 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 19:19:18 +0900 Subject: [PATCH 87/99] spirng batch --- .../FlatFilesFormattedConfiguration.java | 22 ++----------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java index 67ddc08..39129c9 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java @@ -73,31 +73,13 @@ public ListItemReader customItemReader() { return reader; } - /*@Bean - public FlatFileItemWriter customItemWriter() throws Exception { - - BeanWrapperFieldExtractor fieldExtractor = new BeanWrapperFieldExtractor<>(); - fieldExtractor.setNames(new String[] {"id","name","age"}); - fieldExtractor.afterPropertiesSet(); - - DelimitedLineAggregator lineAggregator = new DelimitedLineAggregator<>(); - lineAggregator.setDelimiter(","); - lineAggregator.setFieldExtractor(fieldExtractor); - - return new FlatFileItemWriterBuilder() - .name("CustomerWriter") - .resource(new ClassPathResource("customer.csv")) - .lineAggregator(lineAggregator) - .build(); - }*/ - @Bean public FlatFileItemWriter customItemWriter() throws Exception { return new FlatFileItemWriterBuilder() .name("customerWriter") .resource(new ClassPathResource("customer.csv")) - .delimited() - .delimiter(",") + .formatted() + .format("%-2s%-15s%-2d") .names(new String[] {"id", "name", "age"}) .build(); } From 9762c2e5ca57dbd936b3d05597b386d3cda80482 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 23 Jun 2021 19:20:29 +0900 Subject: [PATCH 88/99] spirng batch --- ...atFilesFormattedConfiguration.java => XMLConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{FlatFilesFormattedConfiguration.java => XMLConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java index 39129c9..6465e6d 100644 --- a/src/main/java/io/springbatch/springbatchlecture/FlatFilesFormattedConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java @@ -40,7 +40,7 @@ @RequiredArgsConstructor @Configuration -public class FlatFilesFormattedConfiguration { +public class XMLConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From ec67a09c5ded6b67b990fa7075dd37e044cba127 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 24 Jun 2021 10:33:53 +0900 Subject: [PATCH 89/99] spirng batch --- .../springbatchlecture/Customer.java | 9 +- .../springbatchlecture/CustomerRowMapper.java | 16 ++++ .../springbatchlecture/XMLConfiguration.java | 86 +++++++++++-------- .../resources/{customer.csv => customer.xml} | 0 4 files changed, 72 insertions(+), 39 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomerRowMapper.java rename src/main/resources/{customer.csv => customer.xml} (100%) diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index 65a1aba..9c60ce4 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -4,12 +4,15 @@ import lombok.AllArgsConstructor; import lombok.Data; +import java.util.Date; + @Data @AllArgsConstructor public class Customer { - private long id; - private String name; - private int age; + private final long id; + private final String firstName; + private final String lastName; + private final Date birthdate; } diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomerRowMapper.java b/src/main/java/io/springbatch/springbatchlecture/CustomerRowMapper.java new file mode 100644 index 0000000..fe34382 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomerRowMapper.java @@ -0,0 +1,16 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.jdbc.core.RowMapper; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class CustomerRowMapper implements RowMapper { + @Override + public Customer mapRow(ResultSet rs, int i) throws SQLException { + return new Customer(rs.getLong("id"), + rs.getString("firstName"), + rs.getString("lastName"), + rs.getDate("birthdate")); + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java index 6465e6d..81ea6bb 100644 --- a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java @@ -5,37 +5,17 @@ import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.support.RunIdIncrementer; -import org.springframework.batch.item.ItemWriter; -import org.springframework.batch.item.adapter.ItemReaderAdapter; import org.springframework.batch.item.database.*; -import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder; -import org.springframework.batch.item.database.builder.JdbcPagingItemReaderBuilder; -import org.springframework.batch.item.database.builder.JpaCursorItemReaderBuilder; -import org.springframework.batch.item.database.builder.JpaPagingItemReaderBuilder; -import org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean; -import org.springframework.batch.item.file.FlatFileItemWriter; -import org.springframework.batch.item.file.builder.FlatFileItemWriterBuilder; -import org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor; -import org.springframework.batch.item.file.transform.DelimitedLineAggregator; -import org.springframework.batch.item.json.JacksonJsonObjectReader; -import org.springframework.batch.item.json.JsonItemReader; -import org.springframework.batch.item.json.builder.JsonItemReaderBuilder; -import org.springframework.batch.item.support.ListItemReader; -import org.springframework.batch.item.xml.StaxEventItemReader; -import org.springframework.batch.item.xml.builder.StaxEventItemReaderBuilder; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.CustomAutowireConfigurer; +import org.springframework.batch.item.database.support.MySqlPagingQueryProvider; +import org.springframework.batch.item.xml.StaxEventItemWriter; +import org.springframework.batch.item.xml.builder.StaxEventItemWriterBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; -import org.springframework.core.io.Resource; -import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.oxm.xstream.XStreamMarshaller; -import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; -import java.sql.Types; import java.util.*; @RequiredArgsConstructor @@ -44,6 +24,7 @@ public class XMLConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; + private final DataSource dataSource; @Bean public Job job() throws Exception { @@ -56,32 +37,65 @@ public Job job() throws Exception { @Bean public Step step1() throws Exception { return stepBuilderFactory.get("step1") - .chunk(10) + .chunk(10) .reader(customItemReader()) .writer(customItemWriter()) .build(); } @Bean - public ListItemReader customItemReader() { + public JdbcPagingItemReader customItemReader() { - List customers = Arrays.asList(new Customer(1, "hong gil dong1", 41), - new Customer(2, "hong gil dong2", 42), - new Customer(3, "hong gil dong3", 43)); + JdbcPagingItemReader reader = new JdbcPagingItemReader<>(); + + reader.setDataSource(this.dataSource); + reader.setFetchSize(10); + reader.setRowMapper(new CustomerRowMapper()); + + MySqlPagingQueryProvider queryProvider = new MySqlPagingQueryProvider(); + queryProvider.setSelectClause("id, firstName, lastName, birthdate"); + queryProvider.setFromClause("from customer"); + queryProvider.setWhereClause("where firstname like :firstname"); + + Map sortKeys = new HashMap<>(1); + + sortKeys.put("id", Order.ASCENDING); + queryProvider.setSortKeys(sortKeys); + reader.setQueryProvider(queryProvider); + + HashMap parameters = new HashMap<>(); + parameters.put("firstname", "A%"); + + reader.setParameterValues(parameters); - ListItemReader reader = new ListItemReader<>(customers); return reader; } @Bean - public FlatFileItemWriter customItemWriter() throws Exception { - return new FlatFileItemWriterBuilder() - .name("customerWriter") - .resource(new ClassPathResource("customer.csv")) - .formatted() - .format("%-2s%-15s%-2d") - .names(new String[] {"id", "name", "age"}) + public StaxEventItemWriter customItemWriter() { + return new StaxEventItemWriterBuilder() + .name("customersWriter") + .marshaller(itemMarshaller()) + .resource(new ClassPathResource("customer.xml")) + .rootTagName("customer") + .overwriteOutput(true) .build(); + + } + + @Bean + public XStreamMarshaller itemMarshaller() { + Map> aliases = new HashMap<>(); + aliases.put("customer", Customer.class); + aliases.put("id", Long.class); + aliases.put("firstName", String.class); + aliases.put("lastName", String.class); + aliases.put("birthdate", Date.class); + XStreamMarshaller xStreamMarshaller = new XStreamMarshaller(); + xStreamMarshaller.setAliases(aliases); + return xStreamMarshaller; } + + } diff --git a/src/main/resources/customer.csv b/src/main/resources/customer.xml similarity index 100% rename from src/main/resources/customer.csv rename to src/main/resources/customer.xml From 0278a1b32248b2abd0c4b75181c8819aba6c1b00 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 24 Jun 2021 10:44:08 +0900 Subject: [PATCH 90/99] spirng batch --- ...figuration.java => JsonConfiguration.java} | 33 +++++-------------- .../resources/{customer.xml => customer.json} | 0 2 files changed, 9 insertions(+), 24 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{XMLConfiguration.java => JsonConfiguration.java} (75%) rename src/main/resources/{customer.xml => customer.json} (100%) diff --git a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java similarity index 75% rename from src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java index 81ea6bb..2780d44 100644 --- a/src/main/java/io/springbatch/springbatchlecture/XMLConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java @@ -7,6 +7,9 @@ import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.item.database.*; import org.springframework.batch.item.database.support.MySqlPagingQueryProvider; +import org.springframework.batch.item.json.JacksonJsonObjectMarshaller; +import org.springframework.batch.item.json.JsonFileItemWriter; +import org.springframework.batch.item.json.builder.JsonFileItemWriterBuilder; import org.springframework.batch.item.xml.StaxEventItemWriter; import org.springframework.batch.item.xml.builder.StaxEventItemWriterBuilder; import org.springframework.context.annotation.Bean; @@ -20,7 +23,7 @@ @RequiredArgsConstructor @Configuration -public class XMLConfiguration { +public class JsonConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -72,30 +75,12 @@ public JdbcPagingItemReader customItemReader() { } @Bean - public StaxEventItemWriter customItemWriter() { - return new StaxEventItemWriterBuilder() - .name("customersWriter") - .marshaller(itemMarshaller()) - .resource(new ClassPathResource("customer.xml")) - .rootTagName("customer") - .overwriteOutput(true) + public JsonFileItemWriter customItemWriter() { + return new JsonFileItemWriterBuilder() + .jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>()) + .resource(new ClassPathResource("customer.json")) + .name("customerJsonFileItemWriter") .build(); - - } - - @Bean - public XStreamMarshaller itemMarshaller() { - Map> aliases = new HashMap<>(); - aliases.put("customer", Customer.class); - aliases.put("id", Long.class); - aliases.put("firstName", String.class); - aliases.put("lastName", String.class); - aliases.put("birthdate", Date.class); - XStreamMarshaller xStreamMarshaller = new XStreamMarshaller(); - xStreamMarshaller.setAliases(aliases); - return xStreamMarshaller; } - - } diff --git a/src/main/resources/customer.xml b/src/main/resources/customer.json similarity index 100% rename from src/main/resources/customer.xml rename to src/main/resources/customer.json From 8dbd88dd35fcb18d4fd61ec1ca98561251b5b772 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 24 Jun 2021 11:22:59 +0900 Subject: [PATCH 91/99] spirng batch --- src/main/java/io/springbatch/springbatchlecture/Customer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index 9c60ce4..d1559d6 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -14,5 +14,4 @@ public class Customer { private final String firstName; private final String lastName; private final Date birthdate; - } From cd5bc89644563a4ac6dc8ba415af2464c1e1da2a Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 24 Jun 2021 11:23:25 +0900 Subject: [PATCH 92/99] spirng batch --- src/main/java/io/springbatch/springbatchlecture/Customer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index d1559d6..bd6e991 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -14,4 +14,4 @@ public class Customer { private final String firstName; private final String lastName; private final Date birthdate; -} +} \ No newline at end of file From ded740be9e7fc586cf0645522acffe8e0eb865e8 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 24 Jun 2021 11:25:48 +0900 Subject: [PATCH 93/99] spirng batch --- src/main/java/io/springbatch/springbatchlecture/Customer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index bd6e991..d1559d6 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -14,4 +14,4 @@ public class Customer { private final String firstName; private final String lastName; private final Date birthdate; -} \ No newline at end of file +} From c70341a1ce08badbf9d3a2cfccc1b152ce5e5347 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 24 Jun 2021 11:26:10 +0900 Subject: [PATCH 94/99] spirng batch --- src/main/java/io/springbatch/springbatchlecture/Customer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index d1559d6..bd6e991 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -14,4 +14,4 @@ public class Customer { private final String firstName; private final String lastName; private final Date birthdate; -} +} \ No newline at end of file From c206565ff9a94544a771f39a58a082cef3532d19 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 24 Jun 2021 11:26:38 +0900 Subject: [PATCH 95/99] spirng batch --- src/main/java/io/springbatch/springbatchlecture/Customer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/Customer.java b/src/main/java/io/springbatch/springbatchlecture/Customer.java index bd6e991..d1559d6 100644 --- a/src/main/java/io/springbatch/springbatchlecture/Customer.java +++ b/src/main/java/io/springbatch/springbatchlecture/Customer.java @@ -14,4 +14,4 @@ public class Customer { private final String firstName; private final String lastName; private final Date birthdate; -} \ No newline at end of file +} From 3db1a4a4bd7ca7bc91ecfea758c533fd08c88f96 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 24 Jun 2021 11:28:25 +0900 Subject: [PATCH 96/99] spirng batch --- .../{JsonConfiguration.java => JdbcBatchConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{JsonConfiguration.java => JdbcBatchConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java index 2780d44..78e909e 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JsonConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java @@ -23,7 +23,7 @@ @RequiredArgsConstructor @Configuration -public class JsonConfiguration { +public class JdbcBatchConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From 8c4bd5abd09e722ef46ab1a87db898eebeac9d44 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 24 Jun 2021 13:25:12 +0900 Subject: [PATCH 97/99] spirng batch --- .../JdbcBatchConfiguration.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java index 78e909e..42886ab 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java @@ -6,6 +6,7 @@ import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.item.database.*; +import org.springframework.batch.item.database.builder.JdbcBatchItemWriterBuilder; import org.springframework.batch.item.database.support.MySqlPagingQueryProvider; import org.springframework.batch.item.json.JacksonJsonObjectMarshaller; import org.springframework.batch.item.json.JsonFileItemWriter; @@ -75,12 +76,24 @@ public JdbcPagingItemReader customItemReader() { } @Bean - public JsonFileItemWriter customItemWriter() { - return new JsonFileItemWriterBuilder() - .jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>()) - .resource(new ClassPathResource("customer.json")) - .name("customerJsonFileItemWriter") + public JdbcBatchItemWriter customItemWriter() { + return new JdbcBatchItemWriterBuilder() + .dataSource(dataSource) + .sql("insert into customer2 values (:id, :firstName, :lastName, :birthdate)") + .beanMapped() .build(); } + + /*@Bean + public JdbcBatchItemWriter customItemWriter() { + JdbcBatchItemWriter itemWriter = new JdbcBatchItemWriter<>(); + + itemWriter.setDataSource(this.dataSource); + itemWriter.setSql("insert into customer2 values (:id, :firstName, :lastName, :birthdate)"); + itemWriter.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider()); + itemWriter.afterPropertiesSet(); + + return itemWriter; + }*/ } From 1cc8b636ae474bc465d6e2cfdbb235f198f29cbc Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 21 Aug 2021 19:23:50 +0900 Subject: [PATCH 98/99] spring batch --- .../springbatch/springbatchlecture/JdbcBatchConfiguration.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java index 42886ab..8442dce 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java @@ -80,7 +80,8 @@ public JdbcBatchItemWriter customItemWriter() { return new JdbcBatchItemWriterBuilder() .dataSource(dataSource) .sql("insert into customer2 values (:id, :firstName, :lastName, :birthdate)") - .beanMapped() +// .beanMapped() + .columnMapped() .build(); } From c03d165f4fc0ce46c38336de7d83207a43623204 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sat, 8 Jan 2022 15:28:17 +0900 Subject: [PATCH 99/99] spring batch --- .../springbatchlecture/JdbcBatchConfiguration.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java index 8442dce..f1c9373 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JdbcBatchConfiguration.java @@ -41,7 +41,7 @@ public Job job() throws Exception { @Bean public Step step1() throws Exception { return stepBuilderFactory.get("step1") - .chunk(10) + .chunk(100) .reader(customItemReader()) .writer(customItemWriter()) .build(); @@ -53,13 +53,13 @@ public JdbcPagingItemReader customItemReader() { JdbcPagingItemReader reader = new JdbcPagingItemReader<>(); reader.setDataSource(this.dataSource); - reader.setFetchSize(10); + reader.setFetchSize(100); reader.setRowMapper(new CustomerRowMapper()); MySqlPagingQueryProvider queryProvider = new MySqlPagingQueryProvider(); queryProvider.setSelectClause("id, firstName, lastName, birthdate"); queryProvider.setFromClause("from customer"); - queryProvider.setWhereClause("where firstname like :firstname"); +// queryProvider.setWhereClause("where firstname like :firstname"); Map sortKeys = new HashMap<>(1); @@ -70,7 +70,7 @@ public JdbcPagingItemReader customItemReader() { HashMap parameters = new HashMap<>(); parameters.put("firstname", "A%"); - reader.setParameterValues(parameters); +// reader.setParameterValues(parameters); return reader; } @@ -80,8 +80,8 @@ public JdbcBatchItemWriter customItemWriter() { return new JdbcBatchItemWriterBuilder() .dataSource(dataSource) .sql("insert into customer2 values (:id, :firstName, :lastName, :birthdate)") -// .beanMapped() - .columnMapped() + .beanMapped() +// .columnMapped() .build(); }