最近の主流な Javaのフレームワークを厳選しながら大規模なプロジェクトでも利用できるようなSpringBoot のボイラープレートを作成しました。フロント、管理画面、バッチ、検索エンジン、会員登録 などのよくある構成を最低限必要な機能に絞ってコンパクトに纏めています。
利用している技術
インフラ編
開発に必要なデータベースなどのインフラ周りはDockerを利用しました。GitHubからダウンロードしたファイルのルートディレクトリに docker
ディレクトリがあり、ここに各種デーモンの設定ファイルを纏めています。
Dockerで起動するデーモン
- NginX 1.15 ・・・ WebサーバーとしてNginXを採用しました。自己証明書を設定済みなので開発環境でSSLとして動作可能です。
- MySQL 5.7 ・・・ DBサーバーにはMySQLを採用しました。データファイルや設定ファイル、 ログなどはコンテナの外に出して 開発時に参照出来るようにしています。
- Solr 8.4 ・・・ フロント表示はSolrからデータ取得表示、また、バッチでDB取得したデータをインデックス生成させています。
- Minio ・・・ 画像のアップロード先にS3を想定している為、ローカル環境でS3のオブジェクトストレージを再現する為に利用しています。
- phpMyAdmin ・・・ 起動したMySQLのデータを参照・編集するためのツールです。
- MailHog ・・・ ダミーのSMTPサーバーです。送信したメールをブラウザで閲覧することが可能です。実際にはメールは送信されないので開発時の誤送信してしまう心配がありません。
フロント画面編

フロント画面では、 APIベースのRestアプリケーションにする為、 React.js を採用しました。フロントエンドはTypescript・Next.js を採用したSSR となる為、submoduleとして別アプリケーションにしています。
https://github.com/isystk/isystk-frontend-sample
フロント 画面で利用している技術
- Next.js(React)
- Typescript
- React Redux
フロント (API)で利用している技術
- SpringBoot 2.2.5
- Doma2
- Spring Data Solr
管理画面編

管理画面では、 AdminLTE を採用しました。 AdminLTE は、Bootstrapをベースにした管理画面等の雛形を作成します。 Webを受託制作する現場においてフロントのデザイン制作をする場合は、クライアントのニーズに柔軟に対応する為、デザインカンプを一から構築するのが主となりBootstrapのようなCSSフレームワークはあまり利用されませんが、管理画面の場合はデザイン作成に不慣れなエンジニアが作成することが多く、また複数の開発者が制作に携わるので チームとして永続的に一定のクオリティの制作物を作り続ける為に、ある程度の「無駄」を許容してでも統一したルールと堅牢性を持ったCSSフレームワークを利用するということには十分なメリットがあると言えます。
管理画面で利用している技術
- AdminLTE3
- SpringBoot 2.2.5
- Doma2
- ログイン/ログアウト
- 一覧検索・登録/更新/削除
- CSV/Excel/PDFダウンロード
バッチ編
バッチアプリケーションでは、SpringBatch を採用しました。サンプルアプリケーションとして、Solrにインデックスを生成するバッチ処理と、CSVファイルからマスタデータをDBにインポートするアプリケーションを追加しています。
- Spring Batch
- SpringBoot 2.2.5
- Doma2
- Spring Data Solr インデックス生成処理
- CSV読み込み/DBインポート処理
Github
https://github.com/isystk/java-springboot-boilerplate
細かな不具合はありますが、システム開発する上で必要最低限な機能と基盤の構築は概ね出来ていると思います。時間のあるときに少しつづ機能追加や不具合を修正して行く予定です。
ディレクトリ構造
. ├── docker │ ├── mysql (DBサーバー) │ │ ├── conf.d (mysqlの設定ファイル) │ │ ├── data (mysqlのデータファイル) │ │ ├── doma-gen (doma2のジェネレータ) │ │ ├── init (mysqlの初期DDL) │ │ ├── logs (mysqlのログ) │ │ ├── script (mysql関連のスクリプト) │ │ └── sample.a5er (ER図) │ ├── nginx (Webサーバー) │ │ ├── conf.d (nginxの設定ファイル) │ │ ├── logs (nginxのログ) │ │ └── ssl (SSL自己証明書) │ ├── phpmyadmin (DB管理コンソール) │ ├── s3(Minio) │ │ └── data (オブジェクトストレージ) │ ├── solr (検索エンジン) │ │ ├── data (solrのデータファイル) │ │ └── logs (solrのログ) │ ├── .env │ └── docker-compose.yml ├── batch (バッチ) ├── business (共通ロジック) ├── static (フロントエンドモジュール) │ └── public (WEB公開ディレクトリ) │ └── thumb (アップロードした写真) ├── web (Web共通ロジック) ├── web-admin (管理画面) ├── web-front (フロント画面) ├── dc.sh (Dockerの起動用スクリプト) └── build.gradle (Gradle用設定ファイル)
データ設計
フロントの認証管理用として T_USER
テーブルがありユーザーが投稿したデータを保存するための T_POST
テーブルが紐付いています。また、管理画面用の認証間利用として T_STAFF
テーブルが存在しています。
ER図

推奨する開発環境
- JDK バージョン 11以上
- Eclipse または、InteliJ IDEA
使い方
Dockerの起動
NginX、MySQL、Solrなどの各種デーモンを起動する。
./gradlew composeUp
各種アプリケーションを実行する。
# 管理画面を起動する ./gradlew web-admin::bootRun # フロントエンドを起動する ./gradlew web-front::bootRun # インデックス生成バッチを実行する ./gradlew batch::bootRun -Pargs=--job=solrRegistJob
接続先情報
テストユーザー test@sample.com / password
接続先 | URL |
---|---|
管理側画面 | https://localhost/admin/ |
フロント側 | https://localhost/ |
フロントAPI | https://localhost/api/v1/post/ |
phpMyAdmin | http://localhost:8888/ |
Solr | http://localhost:8983/solr/ |
MailHog | http://localhost:8025/ |
開発環境構築
ソースのダウンロード
$ git clone https://github.com/isystk/java-springboot-boilerplate.git
必要な設定(Eclipseの場合)
- Lombok pluginをインストールする。 https://qiita.com/ponsuke0531/items/c2dac01e444f510310ae
- Annotation Processingを有効にする。 https://doma.readthedocs.io/en/2.5.0/annotation-processing/#eclipse
businessプロジェクトの「プロパティ」-「Javaコンパイラ」-「注釈処理」を有効にする ファクトリーパスで「JARの追加」を選択後に以下のJARを追加する docker\mysql\doma2\lib\doma-2.27.0.jar “business\target\classes\com\isystk\sample\domain\dao” 以下に “XXImpl.class”が追加されていれば成功です。
参考
プロジェクト | 概要 |
---|---|
Lombok Project | 定型的なコードを書かなくてもよくする |
Springframework | Spring Framework |
Spring Security | セキュリティ対策、認証・認可のフレームワーク |
Doma2 | O/Rマッパー |
spring-boot-doma2 | Doma2とSpring Bootを連携する |
Flyway | DBマイグレーションツール |
Thymeleaf | テンプレートエンジン |
Thymeleaf Layout Dialect | テンプレートをレイアウト化する |
WebJars | jQueryなどのクライアント側ライブラリをJARとして組み込む |
ModelMapper | Beanマッピングライブラリ |
Ehcache | キャッシュライブラリ |
Spock | テストフレームワーク |
Mockito | モッキングフレームワーク |