From fa9f024f416e2fb2a681f220d7e3642775931253 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Mon, 14 Jun 2021 17:18:26 +0900 Subject: [PATCH 01/30] 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/30] 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/30] 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/30] 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 c57e1be291024e40f369e5f5b9285c4c3ce90091 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Tue, 15 Jun 2021 11:26:32 +0900 Subject: [PATCH 05/30] spirng batch --- src/main/resources/application.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e69de29..a0d7547 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.batch.jdbc.initialize-schema=always +#embeded, never \ No newline at end of file From 280216d70074edb03cd1fd4054f9615996823ee3 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 14:43:59 +0900 Subject: [PATCH 06/30] spirng batch --- pom.xml | 5 +++ .../HelloJobConfiguration.java | 2 ++ src/main/resources/application.properties | 2 -- src/main/resources/application.yml | 34 +++++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) delete mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/application.yml diff --git a/pom.xml b/pom.xml index 725a86d..290aa70 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/HelloJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java index 909922c..0ac63a8 100644 --- a/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java @@ -6,6 +6,7 @@ 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.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; @@ -22,6 +23,7 @@ public class HelloJobConfiguration { @Bean public Job helloJob() { return this.jobBuilderFactory.get("helloJob") + .incrementer(new RunIdIncrementer()) .start(step1()) .next(step2()) .build(); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index a0d7547..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.batch.jdbc.initialize-schema=always -#embeded, never \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..0f776e8 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,34 @@ +spring: + profiles: + active: local + +--- +spring: + config: + activate: + on-profile: local + datasource: + hikari: + jdbc-url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + username: sa + password: + driver-class-name: org.h2.Driver + 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 7c8fa9368292c41bfd47812e7ca2fb9d2880bacc Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 14:58:12 +0900 Subject: [PATCH 07/30] spirng batch --- ...obConfiguration.java => JobConfiguration.java} | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{HelloJobConfiguration.java => JobConfiguration.java} (81%) diff --git a/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java similarity index 81% rename from src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java index 0ac63a8..c01fd7d 100644 --- a/src/main/java/io/springbatch/springbatchlecture/HelloJobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java @@ -15,17 +15,17 @@ @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") - .incrementer(new RunIdIncrementer()) + return this.jobBuilderFactory.get("Job") .start(step1()) .next(step2()) + .next(step3()) .build(); } @@ -50,4 +50,13 @@ public Step step2() { }) .build(); } + @Bean + public Step step3() { + return stepBuilderFactory.get("step3") + .tasklet((contribution, chunkContext) -> { + System.out.println("step3 has executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } } From a4fcbca1f758db12f9c9325f6d65ce8e79d3c81a Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 15:27:42 +0900 Subject: [PATCH 08/30] spirng batch --- .../{JobConfiguration.java => JobInstanceConfiguration.java} | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{JobConfiguration.java => JobInstanceConfiguration.java} (94%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobInstanceConfiguration.java similarity index 94% rename from src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JobInstanceConfiguration.java index c01fd7d..0bba69e 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobInstanceConfiguration.java @@ -6,7 +6,6 @@ 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.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; @@ -15,13 +14,13 @@ @RequiredArgsConstructor @Configuration -public class JobConfiguration { +public class JobInstanceConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean - public Job helloJob() { + public Job BatchJob() { return this.jobBuilderFactory.get("Job") .start(step1()) .next(step2()) From 2fffcb2c9f6894465de22bda819ee9a141b1a05f Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 17:20:33 +0900 Subject: [PATCH 09/30] spirng batch --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 290aa70..42ddc51 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ spring-batch-lecture Demo project for Spring Boot - 11 + 1.8 From 08d0fdb0aef5d24e707081000b1a6d33939e39b0 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 17:57:43 +0900 Subject: [PATCH 10/30] spirng batch --- ...on.java => JobParameterConfiguration.java} | 12 +------- .../springbatchlecture/JobParameterTest.java | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 11 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{JobInstanceConfiguration.java => JobParameterConfiguration.java} (82%) create mode 100644 src/main/java/io/springbatch/springbatchlecture/JobParameterTest.java diff --git a/src/main/java/io/springbatch/springbatchlecture/JobInstanceConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobParameterConfiguration.java similarity index 82% rename from src/main/java/io/springbatch/springbatchlecture/JobInstanceConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JobParameterConfiguration.java index 0bba69e..3ff1e58 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobInstanceConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobParameterConfiguration.java @@ -14,7 +14,7 @@ @RequiredArgsConstructor @Configuration -public class JobInstanceConfiguration { +public class JobParameterConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -24,7 +24,6 @@ public Job BatchJob() { return this.jobBuilderFactory.get("Job") .start(step1()) .next(step2()) - .next(step3()) .build(); } @@ -49,13 +48,4 @@ public Step step2() { }) .build(); } - @Bean - public Step step3() { - return stepBuilderFactory.get("step3") - .tasklet((contribution, chunkContext) -> { - System.out.println("step3 has executed"); - return RepeatStatus.FINISHED; - }) - .build(); - } } diff --git a/src/main/java/io/springbatch/springbatchlecture/JobParameterTest.java b/src/main/java/io/springbatch/springbatchlecture/JobParameterTest.java new file mode 100644 index 0000000..ea89bbf --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/JobParameterTest.java @@ -0,0 +1,30 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.core.Job; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.JobParametersBuilder; +import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +@Component +public class JobParameterTest implements ApplicationRunner { + + @Autowired + JobLauncher jobLauncher; + + @Autowired + Job job; + + @Override + public void run(ApplicationArguments args) throws Exception { + + JobParameters jobParameters = new JobParametersBuilder().addString("name", "user1") + .addLong("seq", 1L) + .toJobParameters(); + + jobLauncher.run(job, jobParameters); + } +} From 34778cf5a6d2e66f75f089b91a65426fe410104a Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 18:05:00 +0900 Subject: [PATCH 11/30] spirng batch --- ...on.java => JobExecutionConfiguration.java} | 7 +++-- .../springbatchlecture/JobParameterTest.java | 30 ------------------- 2 files changed, 4 insertions(+), 33 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{JobParameterConfiguration.java => JobExecutionConfiguration.java} (87%) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/JobParameterTest.java diff --git a/src/main/java/io/springbatch/springbatchlecture/JobParameterConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobExecutionConfiguration.java similarity index 87% rename from src/main/java/io/springbatch/springbatchlecture/JobParameterConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JobExecutionConfiguration.java index 3ff1e58..1a429a7 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobParameterConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobExecutionConfiguration.java @@ -14,7 +14,7 @@ @RequiredArgsConstructor @Configuration -public class JobParameterConfiguration { +public class JobExecutionConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -43,8 +43,9 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon public Step step2() { return stepBuilderFactory.get("step2") .tasklet((contribution, chunkContext) -> { - System.out.println("step2 has executed"); - return RepeatStatus.FINISHED; + throw new RuntimeException("JobExecution has failed"); +// System.out.println("step2 has executed"); +// return RepeatStatus.FINISHED; }) .build(); } diff --git a/src/main/java/io/springbatch/springbatchlecture/JobParameterTest.java b/src/main/java/io/springbatch/springbatchlecture/JobParameterTest.java deleted file mode 100644 index ea89bbf..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/JobParameterTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.core.Job; -import org.springframework.batch.core.JobParameters; -import org.springframework.batch.core.JobParametersBuilder; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -@Component -public class JobParameterTest implements ApplicationRunner { - - @Autowired - JobLauncher jobLauncher; - - @Autowired - Job job; - - @Override - public void run(ApplicationArguments args) throws Exception { - - JobParameters jobParameters = new JobParametersBuilder().addString("name", "user1") - .addLong("seq", 1L) - .toJobParameters(); - - jobLauncher.run(job, jobParameters); - } -} From 917dff6049c0d6d0f4f0d0b7749abcae1913035e Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 18:30:55 +0900 Subject: [PATCH 12/30] spirng batch --- ...bExecutionConfiguration.java => StepConfiguration.java} | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{JobExecutionConfiguration.java => StepConfiguration.java} (87%) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobExecutionConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/StepConfiguration.java similarity index 87% rename from src/main/java/io/springbatch/springbatchlecture/JobExecutionConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/StepConfiguration.java index 1a429a7..144e9f4 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobExecutionConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/StepConfiguration.java @@ -14,7 +14,7 @@ @RequiredArgsConstructor @Configuration -public class JobExecutionConfiguration { +public class StepConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -43,9 +43,8 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon public Step step2() { return stepBuilderFactory.get("step2") .tasklet((contribution, chunkContext) -> { - throw new RuntimeException("JobExecution has failed"); -// System.out.println("step2 has executed"); -// return RepeatStatus.FINISHED; + System.out.println("step2 has executed"); + return RepeatStatus.FINISHED; }) .build(); } From 04deeacc094f5f0d5aaa9a0cba9784bc759957cc Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 18:45:34 +0900 Subject: [PATCH 13/30] spirng batch --- ...{StepConfiguration.java => StepExecutionConfiguration.java} | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{StepConfiguration.java => StepExecutionConfiguration.java} (94%) diff --git a/src/main/java/io/springbatch/springbatchlecture/StepConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java similarity index 94% rename from src/main/java/io/springbatch/springbatchlecture/StepConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java index 144e9f4..5e8feb8 100644 --- a/src/main/java/io/springbatch/springbatchlecture/StepConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java @@ -14,7 +14,7 @@ @RequiredArgsConstructor @Configuration -public class StepConfiguration { +public class StepExecutionConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @@ -43,6 +43,7 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon public Step step2() { return stepBuilderFactory.get("step2") .tasklet((contribution, chunkContext) -> { +// throw new RuntimeException("step has failed"); System.out.println("step2 has executed"); return RepeatStatus.FINISHED; }) From 68e72339dcdbf242208f723eb886bee45d5b8fb8 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 18:58:18 +0900 Subject: [PATCH 14/30] spirng batch --- .../springbatchlecture/StepExecutionConfiguration.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java index 5e8feb8..a9748dd 100644 --- a/src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java @@ -1,6 +1,7 @@ package io.springbatch.springbatchlecture; import lombok.RequiredArgsConstructor; +import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepContribution; @@ -33,7 +34,10 @@ public Step step1() { .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println("step1 has executed"); + System.out.println("contribution.getExitStatus(): " + contribution.getExitStatus()); + System.out.println("contribution.getStepExecution().getStepName(): " + contribution.getStepExecution().getStepName()); + System.out.println("contribution.getStepExecution().getJobExecution().getJobInstance().getJobName(): " + contribution.getStepExecution().getJobExecution().getJobInstance().getJobName()); + contribution.setExitStatus(ExitStatus.STOPPED); return RepeatStatus.FINISHED; } }) From 1159692047ff52be31fd6ca8f76601c274f7905d Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 16 Jun 2021 18:59:01 +0900 Subject: [PATCH 15/30] spirng batch --- ...ionConfiguration.java => StepContributionConfiguration.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/springbatch/springbatchlecture/{StepExecutionConfiguration.java => StepContributionConfiguration.java} (98%) diff --git a/src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/StepContributionConfiguration.java similarity index 98% rename from src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/StepContributionConfiguration.java index a9748dd..f21634e 100644 --- a/src/main/java/io/springbatch/springbatchlecture/StepExecutionConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/StepContributionConfiguration.java @@ -15,7 +15,7 @@ @RequiredArgsConstructor @Configuration -public class StepExecutionConfiguration { +public class StepContributionConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; From f6b62893828ee05b6003dbaf8cea2c34eb91ad7e Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 17 Jun 2021 14:37:53 +0900 Subject: [PATCH 16/30] spirng batch --- ...ava => ExecutionContextConfiguration.java} | 21 ++++----------- .../ExecutionContextTasklet.java | 27 +++++++++++++++++++ 2 files changed, 32 insertions(+), 16 deletions(-) rename src/main/java/io/springbatch/springbatchlecture/{StepContributionConfiguration.java => ExecutionContextConfiguration.java} (53%) create mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet.java diff --git a/src/main/java/io/springbatch/springbatchlecture/StepContributionConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java similarity index 53% rename from src/main/java/io/springbatch/springbatchlecture/StepContributionConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java index f21634e..010e85f 100644 --- a/src/main/java/io/springbatch/springbatchlecture/StepContributionConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java @@ -15,11 +15,13 @@ @RequiredArgsConstructor @Configuration -public class StepContributionConfiguration { +public class ExecutionContextConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; + private final ExecutionContextTasklet executionContextTasklet; + @Bean public Job BatchJob() { return this.jobBuilderFactory.get("Job") @@ -31,26 +33,13 @@ public Job BatchJob() { @Bean public Step step1() { return stepBuilderFactory.get("step1") - .tasklet(new Tasklet() { - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - System.out.println("contribution.getExitStatus(): " + contribution.getExitStatus()); - System.out.println("contribution.getStepExecution().getStepName(): " + contribution.getStepExecution().getStepName()); - System.out.println("contribution.getStepExecution().getJobExecution().getJobInstance().getJobName(): " + contribution.getStepExecution().getJobExecution().getJobInstance().getJobName()); - contribution.setExitStatus(ExitStatus.STOPPED); - return RepeatStatus.FINISHED; - } - }) + .tasklet(executionContextTasklet) .build(); } @Bean public Step step2() { return stepBuilderFactory.get("step2") - .tasklet((contribution, chunkContext) -> { -// throw new RuntimeException("step has failed"); - System.out.println("step2 has executed"); - return RepeatStatus.FINISHED; - }) + .tasklet(executionContextTasklet) .build(); } } diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet.java new file mode 100644 index 0000000..1f8ef90 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet.java @@ -0,0 +1,27 @@ +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.item.ExecutionContext; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.stereotype.Component; + +@Component +public class ExecutionContextTasklet implements Tasklet { + + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + + ExecutionContext jobExecutionContext = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext(); + ExecutionContext stepExecutionContext = chunkContext.getStepContext().getStepExecution().getExecutionContext(); + + String jobName = chunkContext.getStepContext().getStepExecution().getJobExecution().getJobInstance().getJobName(); + String stepName = chunkContext.getStepContext().getStepExecution().getStepName(); + + jobExecutionContext.put("jobName", jobName); + stepExecutionContext.put("stepName", stepName); + + return RepeatStatus.FINISHED; + } +} From 71111c5538ecc9b9e34a49cf0b09c0764c4b0441 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 17 Jun 2021 14:49:26 +0900 Subject: [PATCH 17/30] spirng batch --- .../ExecutionContextConfiguration.java | 13 +++---- .../ExecutionContextTasklet1.java | 34 +++++++++++++++++++ ...let.java => ExecutionContextTasklet2.java} | 13 +++---- 3 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet1.java rename src/main/java/io/springbatch/springbatchlecture/{ExecutionContextTasklet.java => ExecutionContextTasklet2.java} (72%) diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java index 010e85f..43a2b58 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java @@ -1,15 +1,10 @@ package io.springbatch.springbatchlecture; import lombok.RequiredArgsConstructor; -import org.springframework.batch.core.ExitStatus; 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; @@ -20,7 +15,8 @@ public class ExecutionContextConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - private final ExecutionContextTasklet executionContextTasklet; + private final ExecutionContextTasklet1 executionContextTasklet1; + private final ExecutionContextTasklet2 executionContextTasklet2; @Bean public Job BatchJob() { @@ -33,13 +29,14 @@ public Job BatchJob() { @Bean public Step step1() { return stepBuilderFactory.get("step1") - .tasklet(executionContextTasklet) + .tasklet(executionContextTasklet1) .build(); } @Bean public Step step2() { return stepBuilderFactory.get("step2") - .tasklet(executionContextTasklet) + .tasklet(executionContextTasklet2) .build(); } + } diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet1.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet1.java new file mode 100644 index 0000000..b5101ee --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet1.java @@ -0,0 +1,34 @@ +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.item.ExecutionContext; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.stereotype.Component; + +@Component +public class ExecutionContextTasklet1 implements Tasklet { + + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + + ExecutionContext jobExecutionContext = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext(); + ExecutionContext stepExecutionContext = chunkContext.getStepContext().getStepExecution().getExecutionContext(); + + String jobName = chunkContext.getStepContext().getStepExecution().getJobExecution().getJobInstance().getJobName(); + String stepName = chunkContext.getStepContext().getStepExecution().getStepName(); + + if(jobExecutionContext.get("jobName") == null){ + jobExecutionContext.put("jobName", jobName); + } + if(stepExecutionContext.get("stepName") == null) { + stepExecutionContext.put("stepName", stepName); + } + + System.out.println("jobName: " + jobExecutionContext.get("jobName")); + System.out.println("stepName: " + stepExecutionContext.get("stepName")); + + return RepeatStatus.FINISHED; + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet2.java similarity index 72% rename from src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet.java rename to src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet2.java index 1f8ef90..064aaa9 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet.java +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet2.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Component; @Component -public class ExecutionContextTasklet implements Tasklet { +public class ExecutionContextTasklet2 implements Tasklet { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { @@ -16,12 +16,13 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon ExecutionContext jobExecutionContext = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext(); ExecutionContext stepExecutionContext = chunkContext.getStepContext().getStepExecution().getExecutionContext(); - String jobName = chunkContext.getStepContext().getStepExecution().getJobExecution().getJobInstance().getJobName(); - String stepName = chunkContext.getStepContext().getStepExecution().getStepName(); - - jobExecutionContext.put("jobName", jobName); - stepExecutionContext.put("stepName", stepName); + System.out.println("jobName: " + jobExecutionContext.get("jobName")); + System.out.println("stepName: " + stepExecutionContext.get("stepName")); + String stepName = chunkContext.getStepContext().getStepExecution().getStepName(); + if(stepExecutionContext.get("stepName") == null) { + stepExecutionContext.put("stepName", stepName); + } return RepeatStatus.FINISHED; } } From 9fd65e7b3bfc883d03268abef4eac6bd15b15bd6 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 17 Jun 2021 16:03:08 +0900 Subject: [PATCH 18/30] spirng batch --- .../ExecutionContextConfiguration.java | 26 +++++++++++++++++++ .../ExecutionContextTasklet3.java | 24 +++++++++++++++++ .../ExecutionContextTasklet4.java | 25 ++++++++++++++++++ .../ExecutionContextTasklet5.java | 16 ++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java create mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet5.java diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java index 43a2b58..511bf8c 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java @@ -5,6 +5,7 @@ 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.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -17,12 +18,19 @@ public class ExecutionContextConfiguration { private final ExecutionContextTasklet1 executionContextTasklet1; private final ExecutionContextTasklet2 executionContextTasklet2; + private final ExecutionContextTasklet3 executionContextTasklet3; + private final ExecutionContextTasklet4 executionContextTasklet4; + private final ExecutionContextTasklet5 executionContextTasklet5; @Bean public Job BatchJob() { return this.jobBuilderFactory.get("Job") + .incrementer(new RunIdIncrementer()) .start(step1()) .next(step2()) + .next(step3()) + .next(step4()) + .next(step5()) .build(); } @@ -38,5 +46,23 @@ public Step step2() { .tasklet(executionContextTasklet2) .build(); } + @Bean + public Step step3() { + return stepBuilderFactory.get("step3") + .tasklet(executionContextTasklet3) + .build(); + } + @Bean + public Step step4() { + return stepBuilderFactory.get("step4") + .tasklet(executionContextTasklet4) + .build(); + } + @Bean + public Step step5() { + return stepBuilderFactory.get("step4") + .tasklet(executionContextTasklet4) + .build(); + } } diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java new file mode 100644 index 0000000..fe9c89f --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java @@ -0,0 +1,24 @@ +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.item.ExecutionContext; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.stereotype.Component; + +@Component +public class ExecutionContextTasklet3 implements Tasklet { + + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + + Object name = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().get("name"); + + if(name == null){ + chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put("name", "user1"); + } + + return RepeatStatus.FINISHED; + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java new file mode 100644 index 0000000..f051bbc --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java @@ -0,0 +1,25 @@ +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 ExecutionContextTasklet4 implements Tasklet { + + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + + Object name = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().get("name"); + + if(name == null){ + chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put("name", "user1"); + } + + throw new RuntimeException("step has failed"); + +// return RepeatStatus.FINISHED; + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet5.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet5.java new file mode 100644 index 0000000..de08033 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet5.java @@ -0,0 +1,16 @@ +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 ExecutionContextTasklet5 implements Tasklet { + + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + return RepeatStatus.FINISHED; + } +} From 012407a6a2df4d8576dd7d817f8aaea60dfdc49d Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 17 Jun 2021 16:12:26 +0900 Subject: [PATCH 19/30] spirng batch --- .../ExecutionContextConfiguration.java | 11 ----------- .../ExecutionContextTasklet3.java | 5 +++-- .../ExecutionContextTasklet4.java | 11 +---------- .../ExecutionContextTasklet5.java | 16 ---------------- 4 files changed, 4 insertions(+), 39 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet5.java diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java index 511bf8c..61971fc 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java @@ -5,7 +5,6 @@ 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.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -20,17 +19,14 @@ public class ExecutionContextConfiguration { private final ExecutionContextTasklet2 executionContextTasklet2; private final ExecutionContextTasklet3 executionContextTasklet3; private final ExecutionContextTasklet4 executionContextTasklet4; - private final ExecutionContextTasklet5 executionContextTasklet5; @Bean public Job BatchJob() { return this.jobBuilderFactory.get("Job") - .incrementer(new RunIdIncrementer()) .start(step1()) .next(step2()) .next(step3()) .next(step4()) - .next(step5()) .build(); } @@ -58,11 +54,4 @@ public Step step4() { .tasklet(executionContextTasklet4) .build(); } - @Bean - public Step step5() { - return stepBuilderFactory.get("step4") - .tasklet(executionContextTasklet4) - .build(); - } - } diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java index fe9c89f..25c2658 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java @@ -16,8 +16,9 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon Object name = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().get("name"); if(name == null){ - chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put("name", "user1"); - } + chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put("name", "user1"); + throw new RuntimeException("step has failed"); + } return RepeatStatus.FINISHED; } diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java index f051bbc..b4672b9 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java +++ b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java @@ -11,15 +11,6 @@ public class ExecutionContextTasklet4 implements Tasklet { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - - Object name = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().get("name"); - - if(name == null){ - chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put("name", "user1"); - } - - throw new RuntimeException("step has failed"); - -// return RepeatStatus.FINISHED; + return RepeatStatus.FINISHED; } } diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet5.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet5.java deleted file mode 100644 index de08033..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet5.java +++ /dev/null @@ -1,16 +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 ExecutionContextTasklet5 implements Tasklet { - - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - return RepeatStatus.FINISHED; - } -} From 545c96e762896d5c5950134e9b01a526ab2666c9 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 17 Jun 2021 17:14:00 +0900 Subject: [PATCH 20/30] spirng batch --- .../CustomBatchConfigurer.java | 35 +++++++++++++++++++ .../ExecutionContextTasklet1.java | 34 ------------------ .../ExecutionContextTasklet2.java | 28 --------------- .../ExecutionContextTasklet3.java | 25 ------------- .../ExecutionContextTasklet4.java | 16 --------- ...n.java => JobRepositoryConfiguration.java} | 34 +++++++----------- 6 files changed, 47 insertions(+), 125 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet1.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet2.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java rename src/main/java/io/springbatch/springbatchlecture/{ExecutionContextConfiguration.java => JobRepositoryConfiguration.java} (55%) diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java b/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java new file mode 100644 index 0000000..f45bd0f --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java @@ -0,0 +1,35 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; +import org.springframework.boot.autoconfigure.batch.BasicBatchConfigurer; +import org.springframework.boot.autoconfigure.batch.BatchProperties; +import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; + +@Configuration +public class CustomBatchConfigurer extends BasicBatchConfigurer { + + private final DataSource dataSource; + + protected CustomBatchConfigurer(BatchProperties properties, DataSource dataSource, TransactionManagerCustomizers transactionManagerCustomizers) { + super(properties, dataSource, transactionManagerCustomizers); + this.dataSource = dataSource; + } + + @Override + protected JobRepository createJobRepository() throws Exception { + + JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); + factory.setDataSource(dataSource); + factory.setTransactionManager(getTransactionManager()); + factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE"); // isolation 수준, 기본값은 “ISOLATION_SERIALIZABLE” + factory.setTablePrefix("SYSTEM_"); // 테이블 Prefix, 기본값은 “BATCH_”, BATCH_JOB_EXECUTION 가 SYSTEM_JOB_EXECUTION 으로 변경됨 + factory.setMaxVarCharLength(1000); // varchar 최대 길이(기본값 2500) + + return factory.getObject(); // Proxy 객체가 생성됨 (트랜잭션 Advice 적용 등을 위해 AOP 기술 적용) + + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet1.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet1.java deleted file mode 100644 index b5101ee..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet1.java +++ /dev/null @@ -1,34 +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.item.ExecutionContext; -import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.stereotype.Component; - -@Component -public class ExecutionContextTasklet1 implements Tasklet { - - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - - ExecutionContext jobExecutionContext = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext(); - ExecutionContext stepExecutionContext = chunkContext.getStepContext().getStepExecution().getExecutionContext(); - - String jobName = chunkContext.getStepContext().getStepExecution().getJobExecution().getJobInstance().getJobName(); - String stepName = chunkContext.getStepContext().getStepExecution().getStepName(); - - if(jobExecutionContext.get("jobName") == null){ - jobExecutionContext.put("jobName", jobName); - } - if(stepExecutionContext.get("stepName") == null) { - stepExecutionContext.put("stepName", stepName); - } - - System.out.println("jobName: " + jobExecutionContext.get("jobName")); - System.out.println("stepName: " + stepExecutionContext.get("stepName")); - - return RepeatStatus.FINISHED; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet2.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet2.java deleted file mode 100644 index 064aaa9..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet2.java +++ /dev/null @@ -1,28 +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.item.ExecutionContext; -import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.stereotype.Component; - -@Component -public class ExecutionContextTasklet2 implements Tasklet { - - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - - ExecutionContext jobExecutionContext = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext(); - ExecutionContext stepExecutionContext = chunkContext.getStepContext().getStepExecution().getExecutionContext(); - - System.out.println("jobName: " + jobExecutionContext.get("jobName")); - System.out.println("stepName: " + stepExecutionContext.get("stepName")); - - String stepName = chunkContext.getStepContext().getStepExecution().getStepName(); - if(stepExecutionContext.get("stepName") == null) { - stepExecutionContext.put("stepName", stepName); - } - return RepeatStatus.FINISHED; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java deleted file mode 100644 index 25c2658..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet3.java +++ /dev/null @@ -1,25 +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.item.ExecutionContext; -import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.stereotype.Component; - -@Component -public class ExecutionContextTasklet3 implements Tasklet { - - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - - Object name = chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().get("name"); - - if(name == null){ - chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put("name", "user1"); - throw new RuntimeException("step has failed"); - } - - return RepeatStatus.FINISHED; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java b/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java deleted file mode 100644 index b4672b9..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextTasklet4.java +++ /dev/null @@ -1,16 +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 ExecutionContextTasklet4 implements Tasklet { - - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - return RepeatStatus.FINISHED; - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java similarity index 55% rename from src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java index 61971fc..1fbdc52 100644 --- a/src/main/java/io/springbatch/springbatchlecture/ExecutionContextConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java @@ -3,55 +3,45 @@ 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 ExecutionContextConfiguration { +public class JobRepositoryConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - private final ExecutionContextTasklet1 executionContextTasklet1; - private final ExecutionContextTasklet2 executionContextTasklet2; - private final ExecutionContextTasklet3 executionContextTasklet3; - private final ExecutionContextTasklet4 executionContextTasklet4; - @Bean public Job BatchJob() { return this.jobBuilderFactory.get("Job") .start(step1()) .next(step2()) - .next(step3()) - .next(step4()) .build(); } @Bean public Step step1() { return stepBuilderFactory.get("step1") - .tasklet(executionContextTasklet1) + .tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + return RepeatStatus.FINISHED; + } + }) .build(); } @Bean public Step step2() { return stepBuilderFactory.get("step2") - .tasklet(executionContextTasklet2) - .build(); - } - @Bean - public Step step3() { - return stepBuilderFactory.get("step3") - .tasklet(executionContextTasklet3) - .build(); - } - @Bean - public Step step4() { - return stepBuilderFactory.get("step4") - .tasklet(executionContextTasklet4) + .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED) .build(); } } From 28feeb533ca9f42c3511dd67488b1c8cee473252 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 17 Jun 2021 17:21:10 +0900 Subject: [PATCH 21/30] spirng batch --- .../springbatch/springbatchlecture/CustomBatchConfigurer.java | 4 +++- src/main/resources/application.yml | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java b/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java index f45bd0f..eb0e607 100644 --- a/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java +++ b/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java @@ -26,7 +26,9 @@ protected JobRepository createJobRepository() throws Exception { factory.setDataSource(dataSource); factory.setTransactionManager(getTransactionManager()); factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE"); // isolation 수준, 기본값은 “ISOLATION_SERIALIZABLE” - factory.setTablePrefix("SYSTEM_"); // 테이블 Prefix, 기본값은 “BATCH_”, BATCH_JOB_EXECUTION 가 SYSTEM_JOB_EXECUTION 으로 변경됨 + factory.setTablePrefix("SYSTEM_"); // 테이블 Prefix, 기본값은 “BATCH_”, + // BATCH_JOB_EXECUTION 가 SYSTEM_JOB_EXECUTION 으로 변경됨 + // 실제 테이블명이 변경되는 것은 아니다 factory.setMaxVarCharLength(1000); // varchar 최대 길이(기본값 2500) return factory.getObject(); // Proxy 객체가 생성됨 (트랜잭션 Advice 적용 등을 위해 AOP 기술 적용) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0f776e8..423daa5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -17,7 +17,6 @@ spring: jdbc: initialize-schema: embedded - --- spring: config: From 67c5abe4651320fc81ec9d6e3f3037578324cf88 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Thu, 17 Jun 2021 17:51:48 +0900 Subject: [PATCH 22/30] spirng batch --- .../CustomBatchConfigurer.java | 2 +- .../JobRepositoryConfiguration.java | 6 +++- .../JobRepositoryListener.java | 31 +++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java b/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java index eb0e607..43dea89 100644 --- a/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java +++ b/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java @@ -26,7 +26,7 @@ protected JobRepository createJobRepository() throws Exception { factory.setDataSource(dataSource); factory.setTransactionManager(getTransactionManager()); factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE"); // isolation 수준, 기본값은 “ISOLATION_SERIALIZABLE” - factory.setTablePrefix("SYSTEM_"); // 테이블 Prefix, 기본값은 “BATCH_”, + factory.setTablePrefix("BATCH_"); // 테이블 Prefix, 기본값은 “BATCH_”, // BATCH_JOB_EXECUTION 가 SYSTEM_JOB_EXECUTION 으로 변경됨 // 실제 테이블명이 변경되는 것은 아니다 factory.setMaxVarCharLength(1000); // varchar 최대 길이(기본값 2500) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java index 1fbdc52..3aed3cd 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java @@ -6,6 +6,7 @@ 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.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; @@ -18,12 +19,15 @@ public class JobRepositoryConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; + private final JobRepositoryListener jobRepositoryListener; @Bean public Job BatchJob() { return this.jobBuilderFactory.get("Job") + .incrementer(new RunIdIncrementer()) .start(step1()) .next(step2()) + .listener(jobRepositoryListener) .build(); } @@ -41,7 +45,7 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon @Bean public Step step2() { return stepBuilderFactory.get("step2") - .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED) + .tasklet((contribution, chunkContext) -> null) .build(); } } diff --git a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java new file mode 100644 index 0000000..a416d72 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java @@ -0,0 +1,31 @@ +package io.springbatch.springbatchlecture; + +import org.springframework.batch.core.*; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class JobRepositoryListener implements JobExecutionListener { + + @Autowired + private JobRepository jobRepository; + + @Override + public void beforeJob(JobExecution jobExecution) { + + } + + @Override + public void afterJob(JobExecution jobExecution) { + String jobName = jobExecution.getJobInstance().getJobName(); + JobParameters jobParameters = new JobParametersBuilder().addString("requestDate", "20210102").toJobParameters(); + + JobInstance jobInstance = jobRepository.createJobInstance(jobName,jobParameters); + System.out.println("jobInstance = " + jobInstance); + + JobExecution lastJobExecution = jobRepository.getLastJobExecution(jobName, jobParameters); + System.out.println("lastJobExecution = " + lastJobExecution); + + } +} From 47a8311ee70c0463f61c59f82f83873b6d85052a Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 09:30:02 +0900 Subject: [PATCH 23/30] spirng batch --- .../io/springbatch/springbatchlecture/JobRepositoryListener.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java index a416d72..d1c1bc5 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java @@ -18,6 +18,7 @@ public void beforeJob(JobExecution jobExecution) { @Override public void afterJob(JobExecution jobExecution) { + String jobName = jobExecution.getJobInstance().getJobName(); JobParameters jobParameters = new JobParametersBuilder().addString("requestDate", "20210102").toJobParameters(); From dd2fd89c4fccc029d7f03ca24f9a65256a0f73ce Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 09:41:17 +0900 Subject: [PATCH 24/30] spirng batch --- .../JobRepositoryConfiguration.java | 1 - .../springbatchlecture/JobRepositoryListener.java | 15 ++++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java index 3aed3cd..eb5f8cb 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java @@ -24,7 +24,6 @@ public class JobRepositoryConfiguration { @Bean public Job BatchJob() { return this.jobBuilderFactory.get("Job") - .incrementer(new RunIdIncrementer()) .start(step1()) .next(step2()) .listener(jobRepositoryListener) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java index d1c1bc5..c74acc8 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java @@ -21,12 +21,13 @@ public void afterJob(JobExecution jobExecution) { String jobName = jobExecution.getJobInstance().getJobName(); JobParameters jobParameters = new JobParametersBuilder().addString("requestDate", "20210102").toJobParameters(); - - JobInstance jobInstance = jobRepository.createJobInstance(jobName,jobParameters); - System.out.println("jobInstance = " + jobInstance); - - JobExecution lastJobExecution = jobRepository.getLastJobExecution(jobName, jobParameters); - System.out.println("lastJobExecution = " + lastJobExecution); - + JobExecution lastExecution = jobRepository.getLastJobExecution(jobName, jobParameters); + if(lastExecution != null) { + for (StepExecution execution : lastExecution.getStepExecutions()) { + BatchStatus status = execution.getStatus(); + System.out.println("BatchStatus = " + status.isRunning()); + System.out.println("BatchStatus = " + status.name()); + } + } } } From 6e9106f8de9e8eff879101f7888f8415f861d906 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 11:24:41 +0900 Subject: [PATCH 25/30] spirng batch --- pom.xml | 4 ++ .../CustomBatchConfigurer.java | 37 -------------- ...ion.java => JobLauncherConfiguration.java} | 4 +- .../JobLaunchingController.java | 48 +++++++++++++++++++ .../JobRepositoryListener.java | 33 ------------- 5 files changed, 53 insertions(+), 73 deletions(-) delete mode 100644 src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java rename src/main/java/io/springbatch/springbatchlecture/{JobRepositoryConfiguration.java => JobLauncherConfiguration.java} (91%) create mode 100644 src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java delete mode 100644 src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java diff --git a/pom.xml b/pom.xml index 42ddc51..d040688 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,10 @@ spring-batch-test test + + org.springframework.boot + spring-boot-starter-web + diff --git a/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java b/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java deleted file mode 100644 index 43dea89..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/CustomBatchConfigurer.java +++ /dev/null @@ -1,37 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; -import org.springframework.boot.autoconfigure.batch.BasicBatchConfigurer; -import org.springframework.boot.autoconfigure.batch.BatchProperties; -import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; -import org.springframework.context.annotation.Configuration; - -import javax.sql.DataSource; - -@Configuration -public class CustomBatchConfigurer extends BasicBatchConfigurer { - - private final DataSource dataSource; - - protected CustomBatchConfigurer(BatchProperties properties, DataSource dataSource, TransactionManagerCustomizers transactionManagerCustomizers) { - super(properties, dataSource, transactionManagerCustomizers); - this.dataSource = dataSource; - } - - @Override - protected JobRepository createJobRepository() throws Exception { - - JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); - factory.setDataSource(dataSource); - factory.setTransactionManager(getTransactionManager()); - factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE"); // isolation 수준, 기본값은 “ISOLATION_SERIALIZABLE” - factory.setTablePrefix("BATCH_"); // 테이블 Prefix, 기본값은 “BATCH_”, - // BATCH_JOB_EXECUTION 가 SYSTEM_JOB_EXECUTION 으로 변경됨 - // 실제 테이블명이 변경되는 것은 아니다 - factory.setMaxVarCharLength(1000); // varchar 최대 길이(기본값 2500) - - return factory.getObject(); // Proxy 객체가 생성됨 (트랜잭션 Advice 적용 등을 위해 AOP 기술 적용) - - } -} diff --git a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java similarity index 91% rename from src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java rename to src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java index eb5f8cb..0a8ff97 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java @@ -15,18 +15,16 @@ @RequiredArgsConstructor @Configuration -public class JobRepositoryConfiguration { +public class JobLauncherConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; - private final JobRepositoryListener jobRepositoryListener; @Bean public Job BatchJob() { return this.jobBuilderFactory.get("Job") .start(step1()) .next(step2()) - .listener(jobRepositoryListener) .build(); } diff --git a/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java new file mode 100644 index 0000000..04f8ff5 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java @@ -0,0 +1,48 @@ +/* + * Copyright 2016 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 org.springframework.batch.core.Job; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.JobParametersBuilder; +import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class JobLaunchingController { + + @Autowired + private Job job; + + @Autowired + private JobLauncher jobLauncher; + + @RequestMapping(value = "/", method = RequestMethod.POST) + public void launch(@RequestParam("name") String name) throws Exception { + + JobParameters jobParameters = new JobParametersBuilder() + .addString("name", name) + .toJobParameters(); + + jobLauncher.run(job, jobParameters); + + System.out.println("Job is completed"); + } +} diff --git a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java b/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java deleted file mode 100644 index c74acc8..0000000 --- a/src/main/java/io/springbatch/springbatchlecture/JobRepositoryListener.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.springbatch.springbatchlecture; - -import org.springframework.batch.core.*; -import org.springframework.batch.core.repository.JobRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class JobRepositoryListener implements JobExecutionListener { - - @Autowired - private JobRepository jobRepository; - - @Override - public void beforeJob(JobExecution jobExecution) { - - } - - @Override - public void afterJob(JobExecution jobExecution) { - - String jobName = jobExecution.getJobInstance().getJobName(); - JobParameters jobParameters = new JobParametersBuilder().addString("requestDate", "20210102").toJobParameters(); - JobExecution lastExecution = jobRepository.getLastJobExecution(jobName, jobParameters); - if(lastExecution != null) { - for (StepExecution execution : lastExecution.getStepExecutions()) { - BatchStatus status = execution.getStatus(); - System.out.println("BatchStatus = " + status.isRunning()); - System.out.println("BatchStatus = " + status.name()); - } - } - } -} From d9f41b2699aa9f87ae4eba2f96b7375283e35fc9 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 14:33:30 +0900 Subject: [PATCH 26/30] spirng batch --- src/batch.http | 7 ++++++ .../JobLauncherConfiguration.java | 1 + .../JobLaunchingController.java | 23 ++++++++++++------- .../springbatchlecture/Member.java | 9 ++++++++ src/main/resources/application.yml | 3 +++ 5 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 src/batch.http create mode 100644 src/main/java/io/springbatch/springbatchlecture/Member.java diff --git a/src/batch.http b/src/batch.http new file mode 100644 index 0000000..a243bed --- /dev/null +++ b/src/batch.http @@ -0,0 +1,7 @@ +### Send POST request with json body +POST http://localhost:8080/batch +Content-Type: application/json + +{ + "id": "leaven" +} \ No newline at end of file diff --git a/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java index 0a8ff97..b0696bc 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java @@ -34,6 +34,7 @@ public Step step1() { .tasklet(new Tasklet() { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + Thread.sleep(3000); return RepeatStatus.FINISHED; } }) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java index 04f8ff5..d2498fa 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java @@ -19,11 +19,15 @@ import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersBuilder; import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.batch.core.launch.support.SimpleJobLauncher; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.boot.autoconfigure.batch.BasicBatchConfigurer; +import org.springframework.core.task.SimpleAsyncTaskExecutor; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; @RestController public class JobLaunchingController { @@ -32,15 +36,18 @@ public class JobLaunchingController { private Job job; @Autowired - private JobLauncher jobLauncher; + private BasicBatchConfigurer basicBatchConfigurer; - @RequestMapping(value = "/", method = RequestMethod.POST) - public void launch(@RequestParam("name") String name) throws Exception { + @PostMapping(value = "/batch") + public void launch(@RequestBody Member member) throws Exception { JobParameters jobParameters = new JobParametersBuilder() - .addString("name", name) + .addString("id", member.getId()) + .addDate("date", new Date()) .toJobParameters(); + SimpleJobLauncher jobLauncher = (SimpleJobLauncher)basicBatchConfigurer.getJobLauncher(); + jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor()); jobLauncher.run(job, jobParameters); System.out.println("Job is completed"); diff --git a/src/main/java/io/springbatch/springbatchlecture/Member.java b/src/main/java/io/springbatch/springbatchlecture/Member.java new file mode 100644 index 0000000..8522109 --- /dev/null +++ b/src/main/java/io/springbatch/springbatchlecture/Member.java @@ -0,0 +1,9 @@ +package io.springbatch.springbatchlecture; + +import lombok.Data; + +@Data +public class Member { + private String id; + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 423daa5..e3fbc5a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,9 @@ spring: profiles: active: local + batch: + job: + enabled: false --- spring: From a5f2b3aec46f4bd884293fd89da2049fca5df53e Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 14:41:56 +0900 Subject: [PATCH 27/30] spirng batch --- .../springbatchlecture/JobLaunchingController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java index d2498fa..2643202 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java @@ -35,6 +35,9 @@ public class JobLaunchingController { @Autowired private Job job; + @Autowired + private JobLauncher simpleLauncher; + @Autowired private BasicBatchConfigurer basicBatchConfigurer; @@ -46,10 +49,13 @@ public void launch(@RequestBody Member member) throws Exception { .addDate("date", new Date()) .toJobParameters(); + //SimpleJobLauncher jobLauncher = (SimpleJobLauncher)simpleLauncher; SimpleJobLauncher jobLauncher = (SimpleJobLauncher)basicBatchConfigurer.getJobLauncher(); jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor()); jobLauncher.run(job, jobParameters); + + System.out.println("Job is completed"); } } From e398d26d40d7516bdfd9e3ec30d3bdc0d92d6006 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Fri, 18 Jun 2021 14:42:12 +0900 Subject: [PATCH 28/30] spirng batch --- .../springbatch/springbatchlecture/JobLaunchingController.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java index 2643202..6575dea 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java @@ -54,8 +54,6 @@ public void launch(@RequestBody Member member) throws Exception { jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor()); jobLauncher.run(job, jobParameters); - - System.out.println("Job is completed"); } } From 1c2a497d5e5e2c717f15cc74c8a2a780e4d560a6 Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Wed, 21 Jul 2021 19:14:40 +0900 Subject: [PATCH 29/30] spring batch --- .../springbatchlecture/JobLaunchingController.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java index 6575dea..03fee76 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobLaunchingController.java @@ -42,18 +42,20 @@ public class JobLaunchingController { private BasicBatchConfigurer basicBatchConfigurer; @PostMapping(value = "/batch") - public void launch(@RequestBody Member member) throws Exception { + public String launch(@RequestBody Member member) throws Exception { JobParameters jobParameters = new JobParametersBuilder() .addString("id", member.getId()) .addDate("date", new Date()) .toJobParameters(); - //SimpleJobLauncher jobLauncher = (SimpleJobLauncher)simpleLauncher; +// SimpleJobLauncher jobLauncher = (SimpleJobLauncher)simpleLauncher; SimpleJobLauncher jobLauncher = (SimpleJobLauncher)basicBatchConfigurer.getJobLauncher(); jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor()); jobLauncher.run(job, jobParameters); System.out.println("Job is completed"); + + return "batch completed"; } } From dc4a36993a982c1510bcc0ac49ce3fe3d394a7bf Mon Sep 17 00:00:00 2001 From: onjsdnjs Date: Sun, 5 Dec 2021 17:18:58 +0900 Subject: [PATCH 30/30] spring batch --- .../springbatch/springbatchlecture/JobLauncherConfiguration.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java b/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java index b0696bc..0f86bef 100644 --- a/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java +++ b/src/main/java/io/springbatch/springbatchlecture/JobLauncherConfiguration.java @@ -25,6 +25,7 @@ public Job BatchJob() { return this.jobBuilderFactory.get("Job") .start(step1()) .next(step2()) + .incrementer(new RunIdIncrementer()) .build(); }