Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/isystk/java-springboot-boilerplate

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

adminlte3 bootstrap4 docker mysql react18 reacthooks solr springboot2 storybook stripe swagger

Last synced: 20 days ago
JSON representation

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

Awesome Lists containing this project

README

        

# 🌙 java-springboot-boilerplate

[![isystk](https://circleci.com/gh/isystk/java-springboot-boilerplate.svg?style=svg)](https://circleci.com/gh/circleci/circleci-docs)
![GitHub issues](https://img.shields.io/github/issues/isystk/java-springboot-boilerplate)
![GitHub forks](https://img.shields.io/github/forks/isystk/java-springboot-boilerplate)
![GitHub stars](https://img.shields.io/github/stars/isystk/java-springboot-boilerplate)
![GitHub license](https://img.shields.io/github/license/isystk/java-springboot-boilerplate)

## 📗 プロゞェクトの抂芁

SpringBoot  React.js の孊習甚サンプルアプリケヌションです。
本プロゞェクトは、[こちら](https://github.com/isystk/laravel-react-boilerplate)で䜜成した「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)

![フロント画面](./front.png "フロント画面")

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

```mermaid
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)

![管理画面](./admin.png "管理画面")

- ログむン/ログアりト
- 商品管理
- 泚文履歎
- 顧客管理
- お問い合わせ管理
- 画像管理
- 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” を有効にする。
```

## 🔧 開発環境の構築

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

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

http://localhost:9001

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

![Minio](./minio.png "Minio")

バック゚ンド環境を構築する
```bash
# 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
```

フロント゚ンド環境を構築する
```bash
# フロント゚ンドをビルドする。
$ cd web-front/resources
$ yarn
$ yarn build
```

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

```
Usage:
$(basename ${0}) [command] []

Options:
stats|st Dockerコンテナの状態を衚瀺したす。
init Dockerコンテナ・むメヌゞ・生成ファむルの状態を初期化したす。
start すべおのDaemonを起動したす。
stop すべおのDaemonを停止したす。
nginx restart NginXを再起動したす。
mysql login MySQLデヌタベヌスにログむンしたす。
mysql export MySQLデヌタベヌスのdumpファむルを゚クスポヌトしたす。
mysql import 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](https://projects.spring.io/spring-framework/)| Spring Framework|
| [Spring Security](https://projects.spring.io/spring-security/)| セキュリティ察策、認蚌・認可のフレヌムワヌク|
| [Doma2](https://doma.readthedocs.io/ja/stable/)| O/Rマッパヌ|
| [spring-boot-doma2](https://github.com/domaframework/doma-spring-boot)| Doma2ずSpring Bootを連携する|
| [Flyway](https://flywaydb.org/)| DBマむグレヌションツヌル|
| [Thymeleaf](http://www.thymeleaf.org/)| テンプレヌト゚ンゞン|
| [Thymeleaf Layout Dialect](https://ultraq.github.io/thymeleaf-layout-dialect/)| テンプレヌトをレむアりト化する|
| [WebJars](https://www.webjars.org/)| jQueryなどのクラむアント偎ラむブラリをJARずしお組み蟌む|
| [ModelMapper](http://modelmapper.org/)| Beanマッピングラむブラリ|
| [Ehcache](http://www.ehcache.org/)| キャッシュラむブラリ|
| [Spock](http://spockframework.org/)| テストフレヌムワヌク|
| [Mockito](http://site.mockito.org/)| モッキングフレヌムワヌク |
| [AdminLTE Docs](https://adminlte.io/docs/2.4/installation)| AdminLTE Docs|
| [Bootstrap4 日本語リファレンス](https://getbootstrap.jp/docs/4.4/getting-started/introduction/)| Bootstrap4 日本語リファレンス|

## 🎫 Licence

[MIT](https://github.com/isystk/java-springboot-boilerplate/blob/master/LICENSE)

## 👀 Author

[isystk](https://github.com/isystk)