|
8 | 8 |  |
9 | 9 | [](https://opensource.org/licenses/Apache-2.0) |
10 | 10 |
|
11 | | -## 🌐 言語サポート |
| 11 | +Spring Boot 3 と Spring Batch 5 を使用した、すぐに使えるバッチ処理フレームワークです。DB-CSVデータ連携やスケルトンバッチなど、実用的なサンプルを提供します。 |
12 | 12 |
|
13 | 13 | 🇬🇧 英語版のREADMEは[こちら](README.md) |
14 | 14 |
|
15 | | -## 📋 必要要件 |
16 | | -- JDK 21(Gradleのツールチェーンで自動的にダウンロード) |
17 | | -- Docker Desktop |
18 | | -- Gradle 8.5以上(gradlewを使用する場合は不要) |
19 | | - |
20 | | -> 💡 このプロジェクトはJDK 21を使用しますが、Gradleのツールチェーン機能により、ローカル環境にJDK 21がインストールされていなくても自動的に必要なJDKがダウンロードされます。 |
21 | | -
|
22 | | -## 🔍 概要 |
23 | | - |
24 | | -このリポジトリは**Spring Boot 3**と**Spring Batch 5**に特化した、エンタープライズ向けバッチ処理アプリケーションの基盤となるスターターキットです。業界のベストプラクティスを取り入れ、最新のSpringフレームワーク機能を活用してバッチ開発プロセスを加速します。 |
25 | | - |
26 | | -### ⭐ 主要機能 |
27 | | - |
28 | | -#### 🏗️ 基本コンポーネント |
29 | | -- **本番対応バッチフレームワーク**: 高速開発のための事前設定済み基本構造 |
30 | | -- **データベース操作**: |
31 | | - - 動的クエリ対応のDB-to-CSVエクスポート |
32 | | - - バルク処理によるハイパフォーマンスなCSV-to-DBインポート |
33 | | -- **エンタープライズグレードのアーキテクチャ**: スケーラビリティとメンテナンス性を考慮した設計 |
34 | | - |
35 | | -### 🛠️ 技術的な特徴 |
36 | | -- **Springフレームワークの活用** |
37 | | - - 堅牢なSpring Batchのジョブとステップ管理 |
38 | | - - JOOQ ORMによる型安全なSQLクエリ |
39 | | - - OpenCSVによるシームレスなCSV処理 |
40 | | -- **デュアルデータベース設定** |
41 | | - - バッチメタデータ用のH2インメモリデータベース |
42 | | - - ビジネスデータ処理用のMySQL |
43 | | - |
44 | | -### 💻 開発環境の特徴 |
45 | | -- **動的設定** |
46 | | - - 環境別プロファイル(ローカル/サーバー) |
47 | | - - 実行時引数による実行するジョブの選択 |
48 | | - - 実行時引数による柔軟なクエリカスタマイズ |
49 | | -- **コード品質ツール** |
50 | | - - Google Java Format(Spotless)による自動フォーマット |
51 | | - - Spotbugsによる静的解析 |
52 | | - - Jacocoによるテストカバレッジレポート |
53 | | - - パイプライン |
54 | | - |
55 | | -### 🚢 DevOps対応 |
56 | | -- コンテナ化: 使用準備完了のMySQL設定を含むDocker対応 |
57 | | -- CI/CD統合: GitHub Actionsワークフロー搭載 |
58 | | -- シンプルなビルドプロセス: 本番対応JARを生成するシングルコマンドビルド |
| 15 | +## 📋 前提条件 |
| 16 | +* JDK 21(Gradleのツールチェーンで自動ダウンロード) |
| 17 | +* Docker Desktop |
| 18 | +* Gradle 8.5+(gradlewを使用する場合は不要) |
59 | 19 |
|
60 | | -## 📌 バージョン情報 |
61 | | -- Spring Boot: 3.4.1 |
62 | | -- Spring Dependency Management: 1.1.7 |
63 | | -- Spotless (Google Java Format): 6.22.0 |
64 | | -- jOOQ: 9.0 |
65 | | -- OpenCSV: 5.9 |
66 | | -- SpotBugs: 6.0.27 |
67 | | - |
68 | | -### 使用プラグイン |
69 | | -- spring-boot |
70 | | -- spring-dependency-management |
71 | | -- spotless |
72 | | -- jooq |
73 | | -- jacoco |
74 | | -- spotbugs |
75 | | -- project-report |
76 | | - |
77 | | ---- |
78 | | - |
79 | | -## 📁 プロジェクト構造 |
80 | | -```text |
81 | | -. |
82 | | -├── gradlew |
83 | | -├── settings.gradle |
84 | | -├── compose.yaml |
85 | | -├── init-scripts |
86 | | -│ ├── 1-create-table.sql |
87 | | -│ └── 2-insert-data.sql |
88 | | -├── dbAndCsvBatch |
89 | | -│ ├── README.md |
90 | | -│ ├── build.gradle |
91 | | -│ └── src |
92 | | -│ ├── main |
93 | | -│ └── test |
94 | | -└── skeletonBatch |
95 | | - ├── README.md |
96 | | - ├── build.gradle |
97 | | - └── src |
98 | | - ├── main |
99 | | - └── test |
100 | | -``` |
101 | 20 |
|
102 | | -## 🚀 クイックスタートガイド |
| 21 | +> 💡 JDK 21が必要ですが、Gradleのツールチェーン機能により、ローカルにインストールされていなくても自動的にダウンロードされます。 |
103 | 22 |
|
104 | | -### 1. リポジトリのクローン |
| 23 | +## 1. スケルトンバッチを試す |
105 | 24 | ```bash |
| 25 | +# リポジトリのクローン |
106 | 26 | git clone https://github.com/kinto-technologies/SpringBoot3BatchStarter.git |
107 | | -``` |
108 | 27 |
|
109 | | -### 2. スケルトンバッチのビルド |
110 | | -```bash |
| 28 | +# スケルトンバッチのビルドと実行 |
111 | 29 | cd skeletonBatch |
112 | 30 | ../gradlew |
113 | | -``` |
114 | | - |
115 | | -### 3. スケルトンバッチの実行 |
116 | | -```bash |
117 | 31 | java -jar build/libs/skeletonBatch-*.jar |
118 | 32 | ``` |
119 | 33 |
|
120 | | -### 4. データベースの初期化 |
| 34 | +## 2. DBとCSVのバッチを試す |
| 35 | + |
121 | 36 | ```bash |
| 37 | +# MySQLコンテナの起動 |
| 38 | +cd .. |
122 | 39 | docker compose up -d |
123 | | -``` |
124 | 40 |
|
125 | | -### 5. DB と CSV バッチジョブをビルドする |
126 | | -```bash |
127 | | -cd ../dbAndCsvBatch |
| 41 | +# ビルドと実行 |
| 42 | +cd dbAndCsvBatch |
128 | 43 | ../gradlew |
129 | | -``` |
130 | 44 |
|
131 | | -### 6. DB to CSV バッチを実行する |
132 | | -```bash |
| 45 | +# DB→CSV出力の実行 |
133 | 46 | java -jar build/libs/dbAndCsvBatch-*.jar --spring.batch.job.name=DB_TO_CSV --spring.profiles.active=local |
134 | | -``` |
135 | 47 |
|
136 | | -### 7. CSV to DB バッチを実行する |
137 | | -```bash |
| 48 | +# CSV→DB登録の実行 |
138 | 49 | java -jar build/libs/dbAndCsvBatch-*.jar --spring.batch.job.name=CSV_TO_DB --spring.profiles.active=local |
139 | 50 | ``` |
140 | 51 |
|
141 | | -> **注意**: データベースセットアップにはDockerのインストールが必要です。 |
142 | | -
|
143 | | -## 🔧 トラブルシューティング |
144 | | -### よくある問題 |
145 | | - |
146 | | -#### 1. Entityクラスが見つからない |
147 | | - - 原因: jOOQによる自動生成が未実行 |
148 | | - - 解決: ./gradlew buildを実行 |
149 | | - |
150 | | -#### 2. データベース接続エラー |
151 | | - - 原因: MySQLコンテナが未起動 |
152 | | - - 解決: docker compose up -dを実行 |
153 | | - |
154 | | -## ♻️ カスタマイズ性 |
155 | | -このスターターキットは簡単なカスタマイズを想定して設計されています。データベース設定とCSVマッピングを特定の要件に合わせて変更するだけで、すぐにビジネスデータの処理を開始できます。 |
| 52 | +--- |
156 | 53 |
|
157 | | -## 📜 ライセンス |
| 54 | +## 📁 プロジェクト構造 |
| 55 | +```text |
| 56 | +. |
| 57 | +├── gradlew # Gradleラッパー |
| 58 | +├── settings.gradle |
| 59 | +├── compose.yaml # Docker Compose設定 |
| 60 | +├── init-scripts # DB初期化スクリプト |
| 61 | +│ ├── 1-create-table.sql |
| 62 | +│ └── 2-insert-data.sql |
| 63 | +├── dbAndCsvBatch # DB-CSVバッチ |
| 64 | +│ ├── README.md |
| 65 | +│ ├── build.gradle |
| 66 | +│ └── src/ |
| 67 | +└── skeletonBatch # スケルトンバッチ |
| 68 | + ├── README.md |
| 69 | + ├── build.gradle |
| 70 | + └── src/ |
| 71 | +``` |
158 | 72 |
|
159 | | -[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)でライセンスされています |
| 73 | +## 💡 主な機能 |
| 74 | + |
| 75 | +### 🏗️ 基盤機能 |
| 76 | +- **本番稼働可能なバッチフレームワーク**: |
| 77 | + - すぐに開発を始められる構成 |
| 78 | + - 必要最小限の設定で動作 |
| 79 | + - H2インメモリDBによる簡単セットアップ |
| 80 | + |
| 81 | +### 🔄 データ操作 |
| 82 | +- **DB→CSV出力**: |
| 83 | + - 動的クエリのサポート |
| 84 | + - 柔軟なデータ抽出設定 |
| 85 | +- **CSV→DB登録**: |
| 86 | + - バルク操作による一括登録 |
| 87 | + - 高性能なデータローディング |
| 88 | + |
| 89 | +### 🛠️ 技術スタック |
| 90 | +- **Spring連携**: |
| 91 | + - Spring Batchによるジョブ/ステップ管理 |
| 92 | + - jOOQによる型安全なSQL実行 |
| 93 | + - OpenCSVによるCSV処理 |
| 94 | +- **デュアルデータベース設定**: |
| 95 | + - バッチ管理用H2インメモリDB |
| 96 | + - 業務データ用MySQL |
| 97 | + |
| 98 | +### 💻 開発者向け機能 |
| 99 | +- **動的設定**: |
| 100 | + - 環境別プロファイル(local/server) |
| 101 | + - 実行時設定可能なジョブ実行 |
| 102 | + - クエリのカスタマイズ対応 |
| 103 | + |
| 104 | +### 🔍 品質管理 |
| 105 | +- Google Java Format(Spotless) |
| 106 | +- 静的解析(SpotBugs) |
| 107 | +- テストカバレッジ(Jacoco) |
| 108 | +- GitHub Actions CIパイプライン |
160 | 109 |
|
161 | | -Copyright © 2024 KINTO Technologies Corporation |
| 110 | +## 📌 バージョン情報 |
| 111 | +* Spring Boot: 3.4.1 |
| 112 | +* Spring Dependency Management: 1.1.7 |
| 113 | +* Spotless (Google Java Format): 6.22.0 |
| 114 | +* jOOQ: 9.0 |
| 115 | +* OpenCSV: 5.9 |
| 116 | +* SpotBugs: 6.0.27 |
| 117 | + |
| 118 | +## ❓ よくある問題と解決方法 |
| 119 | + |
| 120 | +### Entityクラスが見つからない |
| 121 | +- **原因**:jOOQの自動生成が未実行 |
| 122 | +- **解決**:`../gradlew generateJooq` を実行 |
| 123 | +- **または**:`build/generated-src/jooq` を `src/main/java` にコピー |
| 124 | + |
| 125 | +### データベース接続エラー |
| 126 | +- **原因**:MySQLコンテナが未起動 |
| 127 | +- **解決**:`docker compose up -d` を実行 |
| 128 | +- **確認**:`docker ps` でコンテナの状態を確認 |
| 129 | + |
| 130 | +### 複数ジョブ存在エラー |
| 131 | +- **症状**:「Job name must be specified」エラー |
| 132 | +- **原因**:実行するジョブ名の指定が必要 |
| 133 | +- **解決**:`--spring.batch.job.name=DB_TO_CSV` を指定 |
| 134 | + |
| 135 | +## 🔄 継続的インテグレーション |
| 136 | + |
| 137 | +このプロジェクトでは以下のCI/CDツールを活用しています: |
| 138 | + |
| 139 | +### GitHub Actions |
| 140 | +- 自動ビルドとテスト |
| 141 | +- コードフォーマットチェック(Google Java Format) |
| 142 | +- 静的解析(SpotBugs) |
| 143 | +- テストカバレッジ計測(Jacoco) |
| 144 | + |
| 145 | +### Codecov |
| 146 | +- テストカバレッジの可視化 |
| 147 | +- プルリクエスト時のカバレッジレポート自動生成 |
| 148 | +- カバレッジ変更の追跡 |
| 149 | + |
| 150 | +### MySQL CI環境 |
| 151 | +- GitHub Actionsでの自動セットアップ |
| 152 | +- テスト用データベースの構築 |
| 153 | +- jOOQによるエンティティ自動生成の検証 |
| 154 | + |
| 155 | +### ワークフロー |
| 156 | +1. プッシュまたはプルリクエスト時に自動実行 |
| 157 | +2. MySQLコンテナのセットアップ |
| 158 | +3. JDK 21環境の構築 |
| 159 | +4. Gradleによるビルドとテスト |
| 160 | +5. カバレッジレポートの生成とアップロード |
| 161 | + |
| 162 | +## 📄 ライセンス |
| 163 | +Apache License 2.0 |
| 164 | +Copyright © 2024 KINTO Technologies Corporation |
0 commit comments