Skip to content

Commit

Permalink
Merge pull request #3 from Fintan-contents/feature/migrate-spring-boo…
Browse files Browse the repository at this point in the history
…t-3.2-dev-guide

Spring Boot 3系アップデートに伴うガイド修正
  • Loading branch information
in-a-paddy authored Dec 18, 2023
2 parents 5477de9 + 1332f11 commit c8bc9a9
Show file tree
Hide file tree
Showing 18 changed files with 119 additions and 109 deletions.
4 changes: 2 additions & 2 deletions sourcecode/api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@ mvn spring-boot:build-image -DskipTests

プラグインの詳細は次のウェブサイトを参照してください。

- https://docs.spring.io/spring-boot/docs/2.7.x/maven-plugin/reference/htmlsingle/#build-image
- https://spring.pleiades.io/spring-boot/docs/2.7.x/maven-plugin/reference/htmlsingle/#build-image ※非公式・有志による日本語訳
- https://docs.spring.io/spring-boot/docs/3.2.x/maven-plugin/reference/htmlsingle/#build-image
- https://spring.pleiades.io/spring-boot/docs/3.2.x/maven-plugin/reference/htmlsingle/#build-image ※非公式・有志による日本語訳

15 changes: 8 additions & 7 deletions sourcecode/batch/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Spring Boot Maven Pluginを使用して起動します。
起動時にジョブ名を指定します。

```
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.batch.job.names=BA1060201
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.batch.job.name=BA1060201
```

#### ワークテーブルから本テーブルに登録するバッチ
Expand All @@ -36,7 +36,7 @@ Spring Boot Maven Pluginを使用して起動します。
起動時にジョブ名を指定します。

```
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.batch.job.names=BA1060202
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.batch.job.name=BA1060202
```

### 期間内プロジェクト一括出力
Expand All @@ -45,7 +45,7 @@ Spring Boot Maven Pluginを使用して起動します。
起動時にジョブ名を指定します。

```
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.batch.job.names=BA1060101
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.batch.job.name=BA1060101
```

デフォルトでは`work/BA1060101/output`の下に`N21AA002.csv`という名前で出力されます。
Expand All @@ -59,9 +59,10 @@ mvn spring-boot:run -Dspring-boot.run.arguments=--spring.batch.job.names=BA10601
Spring Boot Maven Pluginを使用して起動します。
起動時にジョブID(`resident-batch.job-id`)とジョブ名(`resident-batch.spring-batch-job-name`)、
常駐バッチ起動を有効にするオプション(`resident-batch.enabled`)を指定します。
また、Spring Bootによる自動バッチ起動を無効化するオプション(`spring.batch.job.enabled=false`)も指定します。

```
mvn spring-boot:run -Dspring-boot.run.arguments="--resident-batch.enabled=true --resident-batch.job-id=BA1060301 --resident-batch.spring-batch-job-name=BA1060301"
mvn spring-boot:run -Dspring-boot.run.arguments="--resident-batch.enabled=true --resident-batch.job-id=BA1060301 --resident-batch.spring-batch-job-name=BA1060301 --spring.batch.job.enabled=false"
```

バッチが起動し、プロセスが常駐します。
Expand All @@ -78,7 +79,7 @@ Spring Boot Maven Pluginを使用して起動します。
起動時にジョブ名と更新する業務日付の区分を指定します。

```
mvn spring-boot:run -Dspring-boot.run.arguments="--spring.batch.job.names=BA1070101 --project.update-business-date.segment-id=00"
mvn spring-boot:run -Dspring-boot.run.arguments="--spring.batch.job.name=BA1070101 --project.update-business-date.segment-id=00"
```

デフォルトではシステム日付で指定された区分の業務日付が更新されます。
Expand All @@ -94,6 +95,6 @@ mvn package -DskipTests

プラグインの詳細は次のウェブサイトを参照してください。

- https://docs.spring.io/spring-boot/docs/2.7.x/maven-plugin/reference/htmlsingle/#packaging
- https://spring.pleiades.io/spring-boot/docs/2.7.x/maven-plugin/reference/htmlsingle/#packaging ※非公式・有志による日本語訳
- https://docs.spring.io/spring-boot/docs/3.2.x/maven-plugin/reference/htmlsingle/#packaging
- https://spring.pleiades.io/spring-boot/docs/3.2.x/maven-plugin/reference/htmlsingle/#packaging ※非公式・有志による日本語訳

4 changes: 2 additions & 2 deletions sourcecode/web/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,6 @@ mvn spring-boot:build-image -DskipTests

プラグインの詳細は次のウェブサイトを参照してください。

- https://docs.spring.io/spring-boot/docs/2.7.x/maven-plugin/reference/htmlsingle/#build-image
- https://spring.pleiades.io/spring-boot/docs/2.7.x/maven-plugin/reference/htmlsingle/#build-image ※非公式・有志による日本語訳
- https://docs.spring.io/spring-boot/docs/3.2.x/maven-plugin/reference/htmlsingle/#build-image
- https://spring.pleiades.io/spring-boot/docs/3.2.x/maven-plugin/reference/htmlsingle/#build-image ※非公式・有志による日本語訳

44 changes: 21 additions & 23 deletions 開発ガイド/PGUT工程/pg/batch/batch-application.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,7 @@ public class SampleConfig extends BatchBaseConfig {

@Bean // (1)
public Step sampleStep() { // (1), (2)
return stepBuilderFactory // (3)
.get("BA1010101") // (4)
return new StepBuilder("BA1010101", jobRepository) // (3)

// Chunk型かTasklet型かによって異なるため、この部分の詳細は後述する

Expand All @@ -83,9 +82,9 @@ public class SampleConfig extends BatchBaseConfig {
- (1) `Step`を返すメソッドを作成し`@Bean`を設定する
- (2) Bean名が他のバッチ処理と重複しないようにするため、メソッド名は論理的な名前かバッチ処理IDを用いて命名すること。
このとき、接尾辞として`Step`を設定すること (バッチ処理IDを用いる場合は、`ba1010101Step`など)
- (3) `Step`のインスタンスは、`StepBuilderFactory`を使用して作成する。
`StepBuilderFactory`のインスタンスは`BatchBaseConfig`に用意されているものを使用する
- (4) 最初に`get`メソッドを呼び出す。このとき、引数にはバッチ処理IDを指定する
- (3) `Step`のインスタンスは、`StepBuilder`を使用して作成する。
引数にはバッチ処理IDと`JobRepository`のインスタンスを渡す。
`JobRepository`のインスタンスは`BatchBaseConfig`に用意されているものを使用する

### Chunk型の場合の定義方法

Expand Down Expand Up @@ -118,10 +117,9 @@ public class SampleConfig extends BatchBaseConfig {
public Step sampleStep() {
int chunkSize = sampleProperties().getChunkSize(); // (2)

return stepBuilderFactory
.get("BA1010101")
return new StepBuilder("BA1010101", jobRepository)

.<ProjectWork, Project> chunk(chunkSize) // (1), (2)
.<ProjectWork, Project> chunk(chunkSize, platformTransactionManager) // (1), (2)

.reader(sampleItemReader()) // (3)
.processor(sampleItemProcessor) // (3)
Expand All @@ -146,10 +144,11 @@ public class SampleConfig extends BatchBaseConfig {
- 実装のポイント
- (1) まず`chunk`メソッドを呼び出す。
入力と出力の型の設定方法については[入力と出力の型の設定方法](#入力と出力の型の設定方法)を参照
- (2) `chunk`メソッドの引数には`Chunk`のサイズを指定する
- (2) `chunk`メソッドの引数には`Chunk`のサイズと`PlatformTransactionManager`のインスタンスを渡す
`Chunk`のサイズはプロパティファイルで管理する。したがって、`Properties`経由で値を取得する。
`Properties`経由でプロパティファイルの値を取得する方法については[プロパティ管理](property-management.md)を参照。
また、プロパティファイルの書き方については[`Chunk`のサイズをプロパティファイルに定義する](#chunkのサイズをプロパティファイルに定義する)を参照
また、プロパティファイルの書き方については[`Chunk`のサイズをプロパティファイルに定義する](#chunkのサイズをプロパティファイルに定義する)を参照。
`PlatformTransactionManager`のインスタンスは`BatchBaseConfig`に用意されているものを使用する
- (3) `Step`を構成する`ItemReader``ItemProcessor``ItemWriter`を設定する
- Beanをメソッドで定義している場合は、そのメソッドを呼び出して設定する
- `@Component`でBean定義している場合は、`@Autowired`でフィールドにインジェクションして設定する
Expand Down Expand Up @@ -189,9 +188,8 @@ public class SampleConfig extends BatchBaseConfig {

@Bean
public Step sampleStep() {
return stepBuilderFactory
.get("BA1010101")
.tasklet(sampleTasklet) // (2)
return new StepBuilder("BA1010101", jobRepository)
.tasklet(sampleTasklet, platformTransactionManager) // (2)
.build();
}

Expand All @@ -201,7 +199,8 @@ public class SampleConfig extends BatchBaseConfig {

- 実装のポイント
- (1) `Tasklet`のインスタンスはフィールドに`@Autowired`を設定してフィールドインジェクションで取得する
- (2) `tasklet`メソッドで、`Tasklet`を設定する
- (2) `tasklet`メソッドで、`Tasklet``PlatformTransactionManager`のインスタンスを設定する。
`PlatformTransactionManager`のインスタンスは`BatchBaseConfig`に用意されているものを使用する

## Jobを定義する

Expand All @@ -219,10 +218,9 @@ public class SampleConfig extends BatchBaseConfig {

@Bean // (1)
public Job sampleJob() { // (1), (2)
return jobBuilderFactory // (3)
.get("BA1010101") // (4)
.start(sampleStep()) // (5)
.listener(loggingCountJobListener) // (6)
return new JobBuilder("BA1010101", jobRepository) // (3)
.start(sampleStep()) // (4)
.listener(loggingCountJobListener) // (5)
.build();
}
}
Expand All @@ -232,10 +230,10 @@ public class SampleConfig extends BatchBaseConfig {
- (1) `Job`を返すメソッドを作成し`@Bean`を設定する
- (2) Bean名が他のバッチ処理と重複しないようにするため、メソッド名は論理的な名前かバッチ処理IDを用いて命名すること。
このとき、接尾辞として`Job`を設定すること(バッチ処理IDを用いる場合は、`ba1010101Job`など)
- (3) `Job`のインスタンスは、`JobBuilderFactory`を使用して作成する。
`JobBuilderFactory`のインスタンスは`BatchBaseConfig`に用意されているものを使用する
- (4) 最初に`get`メソッドを呼び出す。このとき、引数にはバッチ処理IDを指定する
- (5) `Step`を定義したメソッドを使い、`start`メソッドで`Step`を設定する
- (6) `Step``Chunk`型の場合は入力件数とスキップした件数の結果をログに出力するため、`LoggingCountJobListener`を設定する
- (3) `Job`のインスタンスは、`JobBuilder`を使用して作成する。
引数にはバッチ処理IDと`JobRepository`のインスタンスを渡す。
`JobRepository`のインスタンスは`BatchBaseConfig`に用意されているものを使用する
- (4) `Step`を定義したメソッドを使い、`start`メソッドで`Step`を設定する
- (5) `Step``Chunk`型の場合は入力件数とスキップした件数の結果をログに出力するため、`LoggingCountJobListener`を設定する
- `LoggingCountJobListener`のインスタンスは、`BatchBaseConfig`に用意されているものを使用する
- `Step``Tasklet`型の場合は`LoggingCountJobListener`を設定しない
4 changes: 2 additions & 2 deletions 開発ガイド/PGUT工程/pg/batch/data-access.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public class ImportProjectsItemWriter implements ItemWriter<Project> {
private ImportProjectsMapper importProjectsMapper;

@Override
public void write(List<? extends Project> items) {
public void write(Chunk<? extends Project> items) {
// (1)
for (Project project : items) {
// (2)
Expand Down Expand Up @@ -271,7 +271,7 @@ public class ImportProjectsToWorkConfig extends BatchBaseConfig {

@Bean
public Step importProjectsToWorkStep() {
return stepBuilderFactory
return new StepBuilder("BA1060201", jobRepository)
// 省略
.listener(importProjectsToWorkTruncateTableListener()) // (4)
.build();
Expand Down
2 changes: 1 addition & 1 deletion 開発ガイド/PGUT工程/pg/batch/error-handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class ImportProjectsToWorkConfig extends BatchBaseConfig {

@Bean
public Step importProjectsToWorkStep() {
return stepBuilderFactory
return new StepBuilder("BA1060201", jobRepository)
// 省略

.faultTolerant() // (1)
Expand Down
4 changes: 2 additions & 2 deletions 開発ガイド/PGUT工程/pg/batch/http-client.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class FileDownloadSampleTasklet implements Tasklet {
responseExtractor // (5)
);

HttpStatus statusCode = response.getStatusCode(); // (6)
HttpStatusCode statusCode = response.getStatusCode(); // (6)
HttpHeaders headers = response.getHeaders(); // (6)
// 省略
return RepeatStatus.FINISHED;
Expand Down Expand Up @@ -152,7 +152,7 @@ public class FileUploadSampleTasklet implements Tasklet {
responseExtractor // (6)
);

HttpStatus statusCode = response.getStatusCode(); // (7)
HttpStatusCode statusCode = response.getStatusCode(); // (7)
HttpHeaders headers = response.getHeaders(); // (7)
FileUploadSampleResponseDto body = response.getBody(); // (7)
// 省略
Expand Down
2 changes: 1 addition & 1 deletion 開発ガイド/PGUT工程/pg/batch/job-parameters.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public class SampleConfig extends BatchBaseConfig {

@Bean
public Step sampleStep() {
return stepBuilderFactory.get("BA1010101")
return new StepBuilder("BA1010101", jobRepository)
// 省略
.processor(sampleItemWriter(null)) // (4)
// 省略
Expand Down
14 changes: 7 additions & 7 deletions 開発ガイド/PGUT工程/pg/batch/message-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

- [メッセージの定義方法](#メッセージの定義方法)
- [メッセージの種類](#メッセージの種類)
- [業務エラーメッセージ](#業務エラーメッセージ)
- [精査エラーメッセージ](#精査エラーメッセージ)
- [Itemのフィールド名](#itemのフィールド名)
- [エラー以外の情報メッセージ](#エラー以外の情報メッセージ)
- [業務エラーメッセージ](#業務エラーメッセージ)
- [精査エラーメッセージ](#精査エラーメッセージ)
- [Itemのフィールド名](#itemのフィールド名)
- [エラー以外の情報メッセージ](#エラー以外の情報メッセージ)

## メッセージの定義方法

Expand Down Expand Up @@ -79,7 +79,7 @@ public class ImportProjectsItemProcessor implements ItemProcessor<ProjectWork, P

- (1)特定フィールド(この例では`clientId`)に固有のメッセージを割り当てたい場合は、`typeMismatch.[フィールド名]`をメッセージIDとする
- (2)特定の型への型変換エラー(この例では`java.lang.Integer`への型変換エラー)に対する汎用的なメッセージIDは、`typeMismatch.[対象となる型の完全修飾名]`とする
- ※何らかの理由で上記以外のメッセージIDとしたい場合は[DefaultMessageCodesResolverJavaDoc](https://docs.spring.io/spring-framework/docs/5.3.x/javadoc-api/org/springframework/validation/DefaultMessageCodesResolver.html)を参照。
- ※何らかの理由で上記以外のメッセージIDとしたい場合は[DefaultMessageCodesResolverJavaDoc](https://docs.spring.io/spring-framework/docs/6.1.x/javadoc-api/org/springframework/validation/DefaultMessageCodesResolver.html)を参照。

- アノテーションを使用した単項目精査、項目間精査

Expand All @@ -94,10 +94,10 @@ public class ImportProjectsItemProcessor implements ItemProcessor<ProjectWork, P
単項目精査でエラーとなった場合の精査エラーメッセージに`Item`のフィールド名を含めるには、メッセージに`{0}`を指定する。
`Item`のフィールド名はデフォルトではJava上での`Item`のフィールド名が使用される。(以下の例では`projectName`)`messages.properties`に`Java上のフィールド名=表示したいフィールド名`を定義することで、適切な名称をメッセージに含めることができる。

以下のようなメッセージが定義された`messages.properties`と`javax.validation.constraints.NotNull`を付与したフィールドを持つ`Item`がある場合、`projectName`の入力がなかった場合は「PJ名を入力してください。」というメッセージが生成される。
以下のようなメッセージが定義された`messages.properties`と`jakarta.validation.constraints.NotNull`を付与したフィールドを持つ`Item`がある場合、`projectName`の入力がなかった場合は「PJ名を入力してください。」というメッセージが生成される。

```properties
javax.validation.constraints.NotNull.message={0}を入力してください。
jakarta.validation.constraints.NotNull.message={0}を入力してください。
projectName=PJ
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ package com.example.batch.project.listener; // (1)

@Component // (2)
@StepScope // (2)
public class CreateUserProjectsStepExecutionListener extends StepExecutionListenerSupport { // (3), (4)
public class CreateUserProjectsStepExecutionListener implements StepExecutionListener { // (3), (4)

@Autowired // (5)
private CreateUsersProjectsMapper createUsersProjectsMapper;
Expand All @@ -40,7 +40,7 @@ public class CreateUserProjectsStepExecutionListener extends StepExecutionListen
- (2) 作成した`StepExecutionListener`には、`@Component``@StepScope`アノテーションを設定する
- (3) Bean名が他のバッチ処理と重複しないようにするため、クラス名は論理的な名前かバッチ処理IDを元に命名する。
このとき、接尾辞には`StepExecutionListener`をつけること(バッチ処理IDを用いる場合は`BA1010101StepExecutionListener`など)
- (4) `StepExecutionListenerSupport`を継承して作成する
- (4) `StepExecutionListener`を実装して作成する
- (5) 依存するBeanのインスタンスはフィールドに`@Autowired`をつけて、フィールドインジェクションで取得する
- (6) 前処理を実装する場合は`beforeStep`メソッドを、後処理を実装する場合は`afterStep`メソッドをオーバーライドして実装する
- (7) `afterStep`メソッドを実装した場合、戻り値は`null`を返すように実装する
Expand All @@ -62,7 +62,7 @@ public class CreateUsersProjectsConfig extends BatchBaseConfig {
public Step createUsersProjectsStep() {
int chunkSize = createUsersProjectsProperties().getChunkSize();

return stepBuilderFactory
return new StepBuilder("BA1060301", jobRepository)
// 途中の実装は省略
.listener(createUserProjectsStepExecutionListener) // (2)
.build();
Expand Down
Loading

0 comments on commit c8bc9a9

Please sign in to comment.