環境構築　010　Spring Boot 初期セットアップ 設定ファイル（properties／logback）切り替え

#1. 概要

実行環境用と開発環境用に、application.properties ファイルと logbackファイルを切り替える
実行環境では、ログレベル info 以上、開発環境では、ログレベル debug 以上のログ出力がされるように設定

#2. application.properties　（実行環境用／開発環境用）の作成 

##2.1. コンポーネントの構成パッケージを作成

|層名 | コンポーネント名 | 役割
|:----|:---------------|:-----
|ドメイン層 | Model    | アプリケーションで扱われるモデル
|          | Repository | ModelのCRUD操作を行う
|           | Service    | 業務ロジックを扱う、トランザクション境界
|アプリケーション層 | Controller | 画面遷移や入出力のフォーマットを制御
|                  | View(HTML) | ユーザインタフェースを提供

![boot-setup-100.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/4f3ab8d4-c00b-f5ac-2012-67197259f2ee.png)

##2.2. properties ファイル作成・設定 

『src/main/resources』 を右クリック、[新規]-[ファイル]をクリック

![boot-setup-101.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/3ccbfeee-a729-0a1d-9147-f01ab7e2fe7b.png)

新規ファイル画面で、ファイル名に、*application-product.properties* を入力、「**完了**」をクリック
同様の手順で、*application-develop.properties*も作成

![boot-setup-102.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/91ee5435-6a61-1736-0a24-3282b03adfcd.png)

|設定項目 | |application-product | application-develop
|:--------|:--|:--------------------|:----------------------
|spring.datasource.driver-class-name |MySQLのドライバ設定 |com.mysql.jdbc.Driver | net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|spring.datasource.url|接続用URL|jdbc:mysql://[接続先サーバー]:[ポート番号]/[データベース名]?serverTimezone=UTC | jdbc:mysql://[接続先サーバー]:[ポート番号]/[データベース名]?serverTimezone=UTC
|spring.datasource.username |接続用ユーザ|接続ユーザ名 | 接続ユーザ名
|spring.datasource.password |接続用パスワード |接続ユーザ名のパスワード | 接続ユーザ名のパスワード
|spring.thymeleaf.cache |thymleafキャッシュ有無 | true | false


![boot-setup-103.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/75031fbe-0ae6-5ccb-a88c-14e86ab88cce.png)

![boot-setup-104.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/205ce18d-96f5-8bb5-db54-bf9d9d63528e.png)

*application.properties* は使用しないため、全行コメントアウト

![boot-setup-105.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/ca0698e8-3f23-cd9d-638e-0fe4a04c886c.png)

##2.3. build.gradle ファイル設定 

*build.gradle* ファイルを開き、bootRun 実行時のJava引数に、『spring.profiles.active=product』を追加
test 実行時のJava引数にも、同様に追加

![boot-setup-106.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/c6d43f2f-eb5f-2e13-1f8a-2cdc60088a82.png)

##2.4. bootRunの実行 

*Gradleタスク*　タブを開き、bootRun をダブルクリック

![boot-setup-107.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/5f9b3ae7-6994-d7ca-8995-a8235947440e.png)

*Gradle実行*　タブで、bootRunタスクが実行されたのを確認

![boot-setup-108.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/ea1a4bc9-aecb-8340-5da4-a55de471a775.png)

*コンソール*　タブで、Spring Boot が起動し、**Started PracApplication** が表示されていれば、application-product.properties を読込、正常起動されている

起動確認できたら、**赤い■ボタン**をクリックし、起動を停止する

![boot-setup-109.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/e3b12bbf-62aa-324b-fa56-03d2354419fe.png)


#3. logback.xml　（実行環境用／開発環境用）の作成 

##3.1. build.gradle ファイル設定 

build.gradle ファイルを開き、下記のモジュールを追加

|No|モジュール|説明
|:---|:----|:----
|1 |log4jdbc-log4j2 | log4jdbc-log4j2 を使用してSQLをログ出力できるようにする
|2 |Janino library  | logback.xml で if condition 文を使用できるようにする
|3 |Apache Commons Lang | StringUtils クラスを使用できるようにする
 
bootRun 実行時のJava引数、test 実行時のJava引数の、『spring.profiles.active=product』をコメントアウトし、『spring.profiles.active=develop』を追加

![boot-setup-216.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/3b6d6c01-e567-afe6-465a-a54eb8bb173f.png)

##3.2. log4jdbc.log4j2.properties ファイル作成・設定 

『src/main/resources』 を右クリック、[新規]-[ファイル]をクリック
新規ファイル画面で、ファイル名に、*log4jdbc.log4j2.properties* を入力、「**完了**」をクリック

![boot-setup-202.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/48dc7c85-fd20-0bb7-436c-8162d52d52f3.png)

*log4jdbc.log4j2.properties* を開いて、Slf4jSpyLogDelegatorクラスを設定

![boot-setup-203.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/0421cd21-79e4-fa5c-7125-23e9e65ce242.png)

##3.3. logback.xml ファイル作成・設定 

『src/main/resources』 を右クリック、[新規]-[ファイル]をクリック
新規ファイル画面で、ファイル名に、*logback.xml* を入力、「**完了**」をクリック

![boot-setup-204.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/708c4827-283e-0c85-dc78-5382312f831d.png)

*logback.xml* ファイルを開き、Java引数、『spring.profiles.active』の値により、読み込むファイル（logback-develop.xml or logback-product.xml）を振り分ける設定を追加

![boot-setup-205.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/a8b19e62-cf9d-b881-d27e-e1940af47743.png)

##3.4. logback-*.xml ファイル作成・設定 

『src/main/resources』 を右クリック、[新規]-[ファイル]をクリック
新規ファイル画面で、ファイル名に、*logback-develop.xml* を入力、「**完了**」をクリック

![boot-setup-206.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/05e7ffda-4c17-1ad5-0990-484ec7adec9a.png)

Spring MVC の org.springframework.web パッケージのログレベルを、*DEBUG* に設定
log4jdbc-log4j2 の jdbc パッケージのログレベルを、サブパッケージ単位に設定

![boot-setup-207.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/c6b0de0a-e9eb-423f-039f-afb99d351c72.png)

『src/main/resources』 を右クリック、[新規]-[ファイル]をクリック
新規ファイル画面で、ファイル名に、*logback-product.xml* を入力、「**完了**」をクリック

![boot-setup-208.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/af188ab3-8c50-d912-b3dc-c85380b00519.png)

Spring MVC の org.springframework.web パッケージのログレベルを、*INFO* に設定
※ log4jdbc-log4j2 は設定しない

![boot-setup-209.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/e8079348-96d0-deb1-00c1-4801906f10d8.png)

##3.5. bootRunの実行 (spring.profiles.active=develop)

bootRun 実行時のJava引数が、『spring.profiles.active=develop』なのを確認
*Gradleタスク*　タブを開き、bootRun をダブルクリック

![boot-setup-216.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/68e5e5f6-dfd0-9caf-5968-8d66d15d83f9.png)

![boot-setup-107.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/944e03c7-c00b-e209-410b-7c4abf6066cf.png)

*コンソール*　タブで、Spring Boot が起動し、ログレベル：DEBUGのログも出力されていて、**Started PracApplication** が表示されていれば、*logback-develop.xml* を読込、起動できている

![boot-setup-210.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/d0f96b83-66a0-41b6-094a-f32ac3d801b5.png)

![boot-setup-211.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/7e405dbf-9de6-d201-5445-abf25f4b4954.png)

##3.6. bootRunの実行 (spring.profiles.active=product)

*build.gradle*ファイルを開き、bootRun 実行時のJava引数を、『spring.profiles.active=product』に変更
*Gradleタスク*　タブを開き、bootRun をダブルクリック

![boot-setup-212.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/674c79a0-6fee-6f6c-cdcb-8b7b6fd82984.png)

*コンソール*　タブで、Spring Boot が起動し、ログレベル：INFOのログのみ出力されていて、**Started PracApplication** が表示されていれば、*logback-product.xml* を読込、起動できている

![boot-setup-213.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/1e66f80c-e101-b58c-1086-b81f9a9212c4.png)

#4. エラー処理の追加

PracApplicationクラスに、Java引数に、『spring.profiles.active=develop』『spring.profiles.active=product』以外なら、UnsupportedOperationExceptionを発生するように、エラー処理を追加

![boot-setup-215.PNG](https://qiita-image-store.s3.amazonaws.com/0/244997/2239be7a-49a6-35d4-8f8a-63e61fee3b90.png)

------------
[参考]
かんがるーさんの日記 <http://ksby.hatenablog.com/>
Spring Boot でログイン画面 + 一覧画面 + 登録画面の Webアプリケーションを作る ( その２ )( Project作成 ) <http://ksby.hatenablog.com/entry/2015/01/03/232948>