SpringBoot を利用したマルチモジュールのボイラープレート

SpringBoot を利用したマルチモジュールのボイラープレート

ここ最近の主流な Javaのフレームワークを厳選しながら大規模プロジェクトでも利用できるようなSpringBoot のボイラープレートを作成しました。

利用している技術

インフラ編

開発に必要なデータベースなどのインフラ周りはDockerを利用しました。GitHubからダウンロードしたファイルのルートディレクトリに docker ディレクトリがあり、ここに各種デーモンの設定ファイルを纏めています。

Dockerで起動するデーモン

  • NginX 1.15 ・・・ WebサーバーとしてNginXを採用しました。自己証明書を設定済みなので開発環境でSSLとして動作可能です。
  • MySQL 5.7 ・・・ DBサーバーにはMySQLを採用しました。データファイルや設定ファイル、 ログなどはコンテナの外に出して 開発時に参照出来るようにしています。
  • Solr 8.4 ・・・ フロント表示はSolrからデータ取得表示、また、バッチでDB取得したデータをインデックス生成させています。
  • phpMyAdmin ・・・ 起動したMySQLのデータを参照・編集するためのツールです。
  • MailHog  ・・・ ダミーのSMTPサーバーです。送信したメールをブラウザで閲覧することが可能です。実際にはメールは送信されないので開発時の誤送信してしまう心配がありません。

フロント画面編

フロント画面では、 APIベースのRestアプリケーションにする為、 Vue.js を採用しました。(大規模なプロジェクトである為、SPA にはせずに画面内でのみ利用しました)

フロント 画面で利用している技術

  • Vuejs2
  • 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 を採用しました。

  • 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のデータファイル)
 │   │   ├── doma2 (doma2のGenファイル)
 │   │   ├── init (mysqlの初期DDL)
 │   │   ├── logs (mysqlのログ)
 │   │   ├── script (mysql関連のスクリプト)
 │   │   └── sample.a5er (ER図)
 │   ├── nginx (Webサーバー)
 │   │   ├── conf.d (nginxの設定ファイル)
 │   │   ├── public (WEB公開ディレクトリ)
 │   │   │   └── thumb (アップロードした写真)
 │   │   ├── logs (nginxのログ)
 │   │   └── ssl (SSL自己証明書)
 │   ├── phpmyadmin (DB管理画面)
 │   ├── solr (検索エンジン)
 │   │   ├── data (solrのデータファイル)
 │   │   └── logs (solrのログ)
 │   ├── .env
 │   └── docker-compose.yml
 ├── batch (バッチ)
 ├── business (共通ロジック)
 ├── web (Web共通ロジック)
 ├── web-admin (管理画面)
 ├── web-front (フロント画面)
 ├── dc.sh (Dockerの起動用スクリプト)
 └── pom.xml (Maven用設定ファイル)

Demo

管理画面

フロント画面

テーブル構成

推奨する開発環境

  1. JDK バージョン 11以上
  2. Eclipse 2019 以上

使い方

Dockerの起動

NginX、MySQL、Solrなどのサーバーを立ち上げる。

Windows10、MacOSXの場合

./dc.sh start

Eclipse用の初期設定

cd /path/to/java-springboot-boilerplate
./mvnw -X -U eclipse:clean eclipse:eclipse -f pom.xml 

実行ファイルの生成

cd /path/to/java-springboot-boilerplate
./mvnw clean package -Dmaven.test.skip=true
cd /path/to/java-springboot-boilerplate
# bootrun admin application
java -jar web-admin/target/web-admin.jar
# bootrun front application
java -jar web-front/target/web-front.jar 

バッチの起動

# bootrun batch application
cd /path/to/java-springboot-boilerplate
java -jar batch/target/batch.jar "--job=solrRegistJob" 

接続先情報

テストユーザー test@sample.com / password
接続先URL
管理側画面https://localhost/admin/
フロント側https://localhost/
フロントAPIhttps://localhost/api/v1/post/
phpMyAdminhttp://localhost:8888/
Solrhttp://localhost:8983/solr/
MailHoghttp://localhost:8025/

開発環境構築

ソースのダウンロード

$ git clone https://github.com/isystk/java-springboot-boilerplate.git

必要な設定(Eclipseの場合)

businessプロジェクトの「プロパティ」-「Javaコンパイラ」-「注釈処理」を有効にする ファクトリーパスで「JARの追加」を選択後に以下のJARを追加する docker\mysql\doma2\lib\doma-2.27.0.jar “business\target\classes\com\isystk\sample\domain\dao” 以下に “XXImpl.class”が追加されていれば成功です。

Docker APIの有効化

Windows10の場合
  • Settings > General > Expose daemon on tcp://...をONにする。
MacOSXの場合
  • デフォルトでunix:///var/run/docker.sockに接続できる。

参考

プロジェクト概要
Lombok Project定型的なコードを書かなくてもよくする
SpringframeworkSpring Framework
Spring Securityセキュリティ対策、認証・認可のフレームワーク
Doma2O/Rマッパー
spring-boot-doma2Doma2とSpring Bootを連携する
FlywayDBマイグレーションツール
Thymeleafテンプレートエンジン
Thymeleaf Layout Dialectテンプレートをレイアウト化する
WebJarsjQueryなどのクライアント側ライブラリをJARとして組み込む
ModelMapperBeanマッピングライブラリ
Ehcacheキャッシュライブラリ
Spockテストフレームワーク
Mockitoモッキングフレームワーク

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。