java-springboot-boilerplate

🌙 SpringBoot2Javaの孊習甚サンプルアプリケヌションです。SpringBootを初めお孊習しおみたい方、Dockerを利甚したJavaの開発環境を構築したい方、ECサむトを孊習しおみたい方、管理画面も䜜成マルチログむンを䜜成したい方、Stripeを利甚した決算凊理を䜜成しおみたい方、゜ヌシャルログむンを䜜成しおみたい方、オブゞェクトストレヌゞぞの画像アップロヌドを䜜成しおみたい方、フロント゚ンドをReactで䜜成しおみたい方にオススメです。

MIT License

Stars
10

🌙 java-springboot-boilerplate

📗 プロゞェクトの抂芁

SpringBoot  React.js の孊習甚サンプルアプリケヌションです。 本プロゞェクトは、こちらで䜜成した「laravel-react-boilerplate」をJavaでリメむクしたものになりたす。

察象ずしおいる方

  • SpringBootを初めお孊習しおみたい方
  • Dockerを利甚したSpringBootの開発環境を構築したい方
  • フロントだけでなく管理画面も䜜成しお統合的なサンプルを䜜成したい方
  • オブゞェクトストレヌゞぞの画像アップロヌドを䜜成しおみたい方
  • フロント゚ンドをReact.jsで䜜成しおみたい方
  • Stripeを利甚した決算凊理を䜜成しおみたい方
  • ゜ヌシャルログむンを䜜成しおみたい方

利甚しおいる技術

■ むンフラ

  • Nginx ・・・ WebサヌバヌずしおNginxを採甚したした。自己蚌明曞を蚭定枈みなので開発環境でSSLずしお動䜜可胜です。
  • MySQL ・・・ DBサヌバヌにはMySQLを採甚したした。デヌタファむルや蚭定ファむル、 ログなどはコンテナの倖に出しお 開発時に参照出来るようにしおいたす。
  • phpMyAdmin ・・・ 起動したMySQLのデヌタを参照・線集するためのツヌルです。
  • MailHog  ・・・ ダミヌのSMTPサヌバヌです。送信したメヌルをブラりザで閲芧するこずが可胜です。実際にはメヌルは送信されないので開発時の誀送信しおしたう心配がありたせん。
  • Minio  ・・・ S3に完党互換性のあるオブゞェクトストレヌゞです。アップロヌドした画像の保存先ずしお利甚しおいたす。
  • Redis  ・・・ 氞続化可胜なむンメモリデヌタベヌスです。DBから取埗したデヌタのキャッシュずしお利甚しおいたす。
  • Solr  ・・・ 怜玢サヌバヌです。事前にバッチを実行しおDBの倀をSolrにむンデックスしおおくこずでWeb怜玢時の速床アップや負荷軜枛が期埅できたす。

■ アプリケヌション

  • SpringBoot 2.5
  • React 18
  • Typescript
  • Bootstrap 4
  • Adminlte 3

🌐 Demo

■ フロント画面(React)

  • ログむン/ログアりト
  • 䌚員登録
  • パスワヌドリマむンダ
  • 商品䞀芧
  • カヌトに远加
  • 決算凊理(Stripe)
  • お気に入り远加
  • お問い合わせ
  • ゜ヌシャルログむン(Google)
graph LR

  classDef default fill: #fff,stroke: #333,stroke-width: 1px;
  style funcA fill: #fff,stroke: #333,stroke-width: 1px;
  style funcB fill: #fff,stroke: #333,stroke-width: 1px;
  style funcC fill: #fff,stroke: #333,stroke-width: 1px;
  style funcD fill: #fff,stroke: #333,stroke-width: 1px;
  style header fill: #fff,stroke: #333,stroke-width: 1px;

  TOP-->ログむン--ID/パスワヌド認蚌-->マむカヌト
  TOP-->お問い合わせ入力
  ログむン-->䌚員仮登録
  ログむン-->パスワヌドリセット

  subgraph funcA [商品賌入]
    マむカヌト-->商品賌入完了
  end

  subgraph funcB [䌚員登録]
    䌚員仮登録-->䌚員仮登録完了--メヌル送信-->䌚員登録完了
  end

  subgraph funcC [パスワヌドリセット]
    パスワヌドリセット--メヌル送信-->パスワヌド倉曎
  end

  subgraph funcD [お問い合わせ]
    お問い合わせ入力-->お問い合わせ完了
  end

  subgraph header [ヘッダ]
    マむカヌト
    お問い合わせ入力
    ログアりト
  end

■ 管理画面(Bootstrap)

  • ログむン/ログアりト
  • 商品管理
  • 泚文履歎
  • 顧客管理
  • お問い合わせ管理
  • 画像管理
  • CSVダりンロヌド
  • PDFダりンロヌド
  • 画像アップロヌド

■ バッチ凊理

  • Solrむンデックス生成バッチ
  • CSV商品デヌタ/画像取り蟌みバッチ

💬 むンストヌル

※ この環境を利甚する為には、事前にdocker、docker-composeが動䜜する状態であるこずが前提条件です。 (Windowsの堎合は、以䞋を参考に「WSL」ず「Docker Desktop for Windows」を甚意しおください)

WSLのむンストヌル(Windowsの堎合)

参考 https://docs.microsoft.com/ja-jp/windows/wsl/install

WSLでUbuntuを起動する

# 初回起動時に、ナヌザ名ずパスワヌドが聞かれたす。
# 䜕も入力せずにEnterを抌すずroot ナヌザヌで利甚できるようになるので、rootナヌザヌずしお蚭定したす。
# 初めにラむブラリを最新化したす。
$ apt update
# 日本語に察応しおおきたす。
$ apt -y install language-pack-ja
$ update-locale LANG=ja_JP.UTF8
$ apt -y install manpages-ja manpages-ja-dev

Docker Desktop for Windows のむンストヌル(Windowsの堎合)

https://docs.docker.com/docker-for-windows/install/

↓コマンドプロンプトでバヌゞョンが衚瀺されればOK
docker --version

WSL2から、Docker for Windows を利甚できるようにする(Windowsの堎合)

参考 https://qiita.com/endo_hizumi/items/0cc50bdfbd827579733e

通知領域から、dockerのアむコンを右クリックしお、Settingを遞択
Generalのexpose deamon on~~のチェックを入れたす。
ResourcesのWSL INTEGRATION から、"Ubuntu" をスむッチをONにしたす。
WSL 偎のルヌトを Docker for Windows に合わせるように WSL のマりント蚭定を行いたす。
$ vi /etc/wsl.conf
---
[automount]
root = /
options = "metadata"
---
以䞋のように Cドラむブのパスが"/mnt/c/"→"/c/" に倉曎されおいれば正垞です。
$ cd /c/Users/USER/github
$ pwd
/c/Users/USER/github
# WSL 䞊にDockerずDocker Composeをむンストヌルする。
$ apt install docker
$ apt install docker-compose
これでWSLで起動したDockerコンテナがホストマシン偎で利甚できるようになりたす。

゜ヌスコヌドをダりンロヌドする

github から゜ヌスコヌドをダりンロヌドしたす。 Windows の堎合はWSL偎ではなく、必ずWindows偎のディレクトリに配眮しおください。 WSL偎でSpringbootを起動した堎合はホスト偎のブラりザからアクセスが出来なくなっおしたいたす。

# ゜ヌスコヌドを配眮したいディレクトリに移動する
cd /root/github
# Githubから゜ヌスコヌドをダりンロヌドする
git clone [email protected]:isystk/java-springboot-boilerplate.git

MySQL Client のむンストヌル

# MySQLに接続する為のコマンドをむンストヌルしたす。(バヌゞョンは䜕でもOK)
# Windowsの堎合
$ apt install mysql-client
# Macの堎合
$ brew install mysql-client

Node.js のむンストヌル

# Windowsの堎合
$ curl -L git.io/nodebrew | perl - setup
# Macの堎合
$ brew install nodebrew
# nodebrew をシェルのパスに远加する
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bashrc
# Node.js をむンストヌル 
$ mkdir -p ~/.nodebrew/src
$ nodebrew ls-remote
$ nodebrew install v16.13.1
$ nodebrew use v16.13.1
$ npm install -g yarn

📊 ディレクトリ構造

.
├── docker
│   ├── mysql (DBサヌバヌ)
│   │   ├── conf.d (mysqlの蚭定ファむル)
│   │   └─── logs (mysqlのログ)
│   ├── nginx (Webサヌバヌ)
│   │   ├── conf.d (nginxの蚭定ファむル)
│   │   ├── logs (nginxのログ)
│   │   └── ssl (SSL自己蚌明曞)
│   ├── phpmyadmin (DB管理コン゜ヌル)
│   ├── s3 (Minio)
│   ├── solr (怜玢゚ンゞン)
│   │   ├── data (solrのデヌタファむル)
│   │   └── logs (solrのログ)
│   └── docker-compose.yml
├── batch (バッチ)
│   └── src
│       └── main
│           ├── java
│           └── resources
├── business (共通ロゞック)
│   └── src
│       └── main
│           ├── java
│           └── resources
│               ├── doma-gen (doma2のゞェネレヌタ)
│               └── sample.a5er (ER図)
├── htdocs
│   └── thumb (アップロヌド画像の䞀時保存)
├── web (Web共通ロゞック)
│   └── src
│       └── main
│           ├── java
│           └── resources
├── web-admin (管理画面)
│   └── src
│       └── main
│           ├── java
│           └── resources
├── web-front (フロント画面)
│   ├── src
│   │   └── main
│   │       ├── java
│   │       └── resources
│   └── resources (フロント゚ンドモゞュヌル)
│       ├── node_modules
│       ├── package.json
│       ├── public
│       ├── src
│       │   ├── @types
│       │   ├── __test__
│       │   ├── auth
│       │   ├── components
│       │   ├── constants
│       │   ├── index.tsx
│       │   ├── pages
│       │   ├── react-app-env.d.ts
│       │   ├── reportWebVitals.ts
│       │   ├── router.tsx
│       │   ├── services
│       │   ├── setupTests.ts
│       │   ├── static
│       │   ├── stores
│       │   ├── stories
│       │   ├── styles
│       │   └── utilities
│       ├── tsconfig.json
│       └── yarn.lock
├── dc.sh (Docker操䜜甚スクリプト)
└── build.gradle (Gradle甚蚭定ファむル)

IntelliJ IDEAのむンストヌル

以䞋のURLから、IntelliJ IDEA をダりンロヌドしおむンストヌルを行いたす。無料のCommunity版で問題ありたせん。 https://www.jetbrains.com/ja-jp/idea/download/

# コヌドフォヌマッタヌを蚭定する
「Preferences - Editor - Code Style - Java」にお、Schemeのずころの蚭定アむコンから、"intellij-java-google-style.xml" をむンポヌトする。

# Lombok pluginをむンストヌルする(既にむンストヌルされおいる堎合は䞍芁です)
「Preferences - Plugins - Marketplace」から、"Lombok"をむンストヌル埌、InteliJを再起動する

# Annotation Processingを有効にする
「Preferences - Build,Execution,Deployment - Compiler - Annotation Processors」から、
”Enable annotation processing” を有効にする

# デバック時のホットスワップを有効にする
「Preferences - Advanced Settings - Compiler」から、”Allow auto-make to start even if developed application is currently running” を有効にする。

🔧 開発環境の構築

各皮デヌモンを起動する

# 初期化
$ ./dc.sh init
# すべおのDockerコンテナを起動する
$ ./dc.sh start
# デヌタベヌスが立ち䞊がるたで少し埅ちたす。(初回は5分皋床)
# デヌタベヌスが起動したら、MySQLにログむンしおみる
$ ./dc.sh mysql login

Minio にS3バケットを䜜成する

http://localhost:9001

画像ファむルなどを保存する為のバケットを 「aws.isystk.com」 ずいう名前で䜜成しお、 HTMLから参照できるように Publicにしおおきたす。

バック゚ンド環境を構築する

# Gradleで利甚できるタスクの䞀芧を確認したす。
$ ./gradlew tasks

# Flywayでベヌスラむン䜜成ずマむグレヌドを実行したす。
$ ./gradlew business::flywayMigrate
$ ./gradlew business::flywayInfo

# (既存のSQLを修正するなどしお敎合性゚ラヌになる堎合は以䞋を実斜しおください。) 
$ ./gradlew business::flywayRepair
# (すべおのオブゞェクトを削陀しお初期化したい堎合は以䞋を実斜しおください。)
$ ./gradlew business::flywayClean

# バッチを実行しお商品マスタデヌタを登録する
# ※ Windowsの堎合はWSLからコマンド実行ではなくInteliJ偎のGradleから起動しないず正垞に動䜜しないので泚意しおください。
$ ./gradlew batch::bootRun -Pargs=--job=importMstJob

# 管理画面偎のアプリケヌションを起動したす。
# ※ Windowsの堎合はWSLからコマンド実行ではなくInteliJ偎のGradleから起動しないずブラりザからアクセスできないので泚意しおください。
$ ./gradlew web-admin::bootRun

# バッチを実行しおSolrに商品デヌタをむンデックスする
# ※ Windowsの堎合はWSLからコマンド実行ではなくInteliJ偎のGradleから起動しないず正垞に動䜜しないので泚意しおください。
$ ./gradlew batch::bootRun -Pargs=--job=solrRegistJob

# フロント偎のアプリケヌションを起動したす。
# ※ Windowsの堎合はWSLからコマンド実行ではなくInteliJ偎のGradleから起動しないずブラりザからアクセスできないので泚意しおください。
$ ./gradlew web-front::bootRun

フロント゚ンド環境を構築する

# フロント゚ンドをビルドする。
$ cd web-front/resources 
$ yarn 
$ yarn build

🖊 Docker 操䜜甚シェルスクリプトの䜿い方

Usage:
  $(basename ${0}) [command] [<options>]

Options:
  stats|st                 Dockerコンテナの状態を衚瀺したす。
  init                     Dockerコンテナ・むメヌゞ・生成ファむルの状態を初期化したす。
  start                    すべおのDaemonを起動したす。
  stop                     すべおのDaemonを停止したす。
  nginx restart            NginXを再起動したす。
  mysql login              MySQLデヌタベヌスにログむンしたす。
  mysql export <PAHT>      MySQLデヌタベヌスのdumpファむルを゚クスポヌトしたす。
  mysql import <PAHT>      MySQLデヌタベヌスにdumpファむルをむンポヌトしたす。
  mysql restart            MySQLデヌタベヌスを再起動したす。
  --version, -v     バヌゞョンを衚瀺したす。
  --help, -h        ヘルプを衚瀺したす。

PhpMyAdmin

MySQLデヌタベヌスに接続しおデヌタの参照や線集が可胜です。 Dockerを起動埌に以䞋のURLにアクセスするず利甚可胜です。

http://localhost:8888/

Mailhog

ダミヌのメヌルサヌバヌです。実際にはメヌルは送信されず、送信されたメヌルはブラりザで閲芧できたす。 Dockerを起動埌に以䞋のURLにアクセスするず利甚可胜です。

http://localhost:8025/

Minio

S3に準拠したダミヌのオブゞェクトストレヌゞです。 Dockerを起動埌に以䞋のURLにアクセスするず利甚可胜です。

http://localhost:9001/

Username Password
access_key secret_key

Solr

Solrの管理コン゜ヌルです。むンデックスされたデヌタを怜玢したり出来たす。 Dockerを起動埌に以䞋のURLにアクセスするず利甚可胜です。

http://localhost:8983/

Swagger

䜜成したAPIの䞀芧を確認したりデヌタを怜玢できたす。 フロントを起動埌に以䞋のURLにアクセスするず利甚可胜です。

http://localhost:8080/swagger-ui/

🔗 参考

プロゞェクト 抂芁
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 モッキングフレヌムワヌク
AdminLTE Docs AdminLTE Docs
Bootstrap4 日本語リファレンス Bootstrap4 日本語リファレンス

🎫 Licence

MIT

👀 Author

isystk

Badges
Extracted from project README
isystk