Spring Bootを使用した従来型のシンプルなアプリケーション
jma_area)から参照jma_api_log)に保存スクリーンショット:

データベースER図:

デフォルトで使用可能(同梱済)なJDBCドライバ:
アプリケーションは、Fat-JAR/Uber-JAR(1つのJARファイルに依存ライブラリも含めたアプリケーションのすべてを格納する形式)でビルドする。Fat-JARには、アプリケーションサーバ(Tomcat)も同梱されるため、別途アプリケーションサーバを用意しなくても実行が可能である。
Spring BootはWARファイルとしてビルドすることも可能だが、特別な理由がなければFat-JAR形式を利用するのが望ましい。
| Fat-JARにする理由 | WARにする理由 |
|---|---|
| ・実行環境に対する依存関係がJREのみとなり、開発/本番の環境差異に起因する問題が発生するリスクが低い ・本番環境で使用するものと同様のアプリケーションサーバを使用してテストが実施可能(特にxUnitでのITは有効) | ・Java EEサーバの機能が必要(JBoss、WebLogic、WebSphere...) ・実行環境にアプリケーションサーバが稼働しており、リソースの制約で別インスタンスではなく別のWebアプリとして同居させたい |
以下のコマンドを実行することで、build\libsディレクトリにアプリケーションのJARファイルが生成される。
git clone https://github.com/t-tsutsumi-scc/spring-boot-traditional-example.git
cd spring-boot-traditional-example
./gradlew bootJar
Linuxのプロセスマネージャ(systemd)でアプリケーションを実行する環境を構築する手順を示す。
# Debian or Ubuntu
sudo apt -y install openjdk-11-jre-headless
# RHEL
sudo dnf -y install java-11-openjdk-headless
sudo useradd -r -s /bin/false appuser
sudo mkdir -m 750 /opt/spring-boot-traditional-example
sudo chown root:appuser /opt/spring-boot-traditional-example
/opt/spring-boot-traditional-example/app.jarに配置sudo chown root:appuser /opt/spring-boot-traditional-example/app.jar
sudo chmod 640 /opt/spring-boot-traditional-example/app.jar
実行環境固有の設定値(DBの接続情報など)は、アプリの環境変数で設定する。 このファイルはパスワードなどの機密情報を定義するため、セキュリティに注意する必要がある。
環境変数定義ファイルを/opt/spring-boot-traditional-example/app.envとして作成
# 環境変数定義ファイルの例(Amazon RDSのPostgreSQLに接続する例)
SPRING_PROFILES_ACTIVE=production
SPRING_DATASOURCE_DRIVERCLASSNAME=org.postgresql.Driver
SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql-instance1.cg034hpkmmjt.us-east-1.rds.amazonaws.com/myDatabase
SPRING_DATASOURCE_USERNAME=masterUsername
SPRING_DATASOURCE_PASSWORD=masterPassword
src/main/resources/config/application.yml)の値を上書きする#で始まる行はコメントとして無視される\)で終わる行は次の行と連結される") を使用しない限り先頭と末尾の空白は取り除かれる環境変数定義ファイルのオーナー、パーミッションを変更(root以外読み書きできないようにする)
sudo chown root:root /opt/spring-boot-traditional-example/app.env
sudo chmod 600 /opt/spring-boot-traditional-example/app.env
systemdのサービス定義ファイルを/etc/systemd/system/spring-boot-traditional-example.serviceとして作成
[Unit]
Description=Spring Boot Traditional Example service
After=network.target
[Service]
User=appuser
EnvironmentFile=/opt/spring-boot-traditional-example/app.env
ExecStart=/usr/bin/java -jar /opt/spring-boot-traditional-example/app.jar
Restart=on-failure
SuccessExitStatus=143
PrivateTmp=true
[Install]
WantedBy=multi-user.target
サービスを自動起動するように設定
sudo systemctl enable spring-boot-traditional-example
# 起動
sudo systemctl start spring-boot-traditional-example
# ステータス確認
sudo systemctl status spring-boot-traditional-example
# ログ確認
sudo journalctl -ef -u spring-boot-traditional-example
LiquibaseというDBマイグレーションツールが同梱されており、アプリの初回起動時にDBのテーブルは自動で作成される。
PostgreSQLならCOPY FROM、MySQLならLOAD DATA、SQL ServerならBULK INSERTを使用してマスタデータを投入する。
※前述のLiquibaseを使用してマスタデータを自動投入することも可能だが、手動のDB操作を体験してもらうために敢えて実施していない(地域情報もWeb APIで取得可能なため、本来はDBに格納する必要性すらない)
PostgreSQLのpsqlによるデータ投入例:
COPY jma_area FROM '/PATH_TO_CSV_DIR/jma_area.csv' FORMAT csv;
マスタデータのCSVファイル(jma_area.csv)の例:
011000,宗谷地方,宗谷地方
012010,上川・留萌地方,上川地方
012020,上川・留萌地方,留萌地方
013010,網走・北見・紋別地方,網走地方
013020,網走・北見・紋別地方,北見地方
013030,網走・北見・紋別地方,紋別地方
014010,釧路・根室地方,根室地方
014020,釧路・根室地方,釧路地方
014030,十勝地方,十勝地方
015010,胆振・日高地方,胆振地方
015020,胆振・日高地方,日高地方
016010,石狩・空知・後志地方,石狩地方
016020,石狩・空知・後志地方,空知地方
016030,石狩・空知・後志地方,後志地方
017010,渡島・檜山地方,渡島地方
017020,渡島・檜山地方,檜山地方
020010,青森県,津軽
020020,青森県,下北
020030,青森県,三八上北
030010,岩手県,内陸
030020,岩手県,沿岸北部
030030,岩手県,沿岸南部
040010,宮城県,東部
040020,宮城県,西部
050010,秋田県,沿岸
050020,秋田県,内陸
060010,山形県,村山
060020,山形県,置賜
060030,山形県,庄内
060040,山形県,最上
070010,福島県,中通り
070020,福島県,浜通り
070030,福島県,会津
080010,茨城県,北部
080020,茨城県,南部
090010,栃木県,南部
090020,栃木県,北部
100010,群馬県,南部
100020,群馬県,北部
110010,埼玉県,南部
110020,埼玉県,北部
110030,埼玉県,秩父地方
120010,千葉県,北西部
120020,千葉県,北東部
120030,千葉県,南部
130010,東京都,東京地方
130020,東京都,伊豆諸島北部
130030,東京都,伊豆諸島南部
130040,東京都,小笠原諸島
140010,神奈川県,東部
140020,神奈川県,西部
150010,新潟県,下越
150020,新潟県,中越
150030,新潟県,上越
150040,新潟県,佐渡
160010,富山県,東部
160020,富山県,西部
170010,石川県,加賀
170020,石川県,能登
180010,福井県,嶺北
180020,福井県,嶺南
190010,山梨県,中・西部
190020,山梨県,東部・富士五湖
200010,長野県,北部
200020,長野県,中部
200030,長野県,南部
210010,岐阜県,美濃地方
210020,岐阜県,飛騨地方
220010,静岡県,中部
220020,静岡県,伊豆
220030,静岡県,東部
220040,静岡県,西部
230010,愛知県,西部
230020,愛知県,東部
240010,三重県,北中部
240020,三重県,南部
250010,滋賀県,南部
250020,滋賀県,北部
260010,京都府,南部
260020,京都府,北部
270000,大阪府,大阪府
280010,兵庫県,南部
280020,兵庫県,北部
290010,奈良県,北部
290020,奈良県,南部
300010,和歌山県,北部
300020,和歌山県,南部
310010,鳥取県,東部
310020,鳥取県,中・西部
320010,島根県,東部
320020,島根県,西部
320030,島根県,隠岐
330010,岡山県,南部
330020,岡山県,北部
340010,広島県,南部
340020,広島県,北部
350010,山口県,西部
350020,山口県,中部
350030,山口県,東部
350040,山口県,北部
360010,徳島県,北部
360020,徳島県,南部
370000,香川県,香川県
380010,愛媛県,中予
380020,愛媛県,東予
380030,愛媛県,南予
390010,高知県,中部
390020,高知県,東部
390030,高知県,西部
400010,福岡県,福岡地方
400020,福岡県,北九州地方
400030,福岡県,筑豊地方
400040,福岡県,筑後地方
410010,佐賀県,南部
410020,佐賀県,北部
420010,長崎県,南部
420020,長崎県,北部
420030,長崎県,壱岐・対馬
420040,長崎県,五島
430010,熊本県,熊本地方
430020,熊本県,阿蘇地方
430030,熊本県,天草・芦北地方
430040,熊本県,球磨地方
440010,大分県,中部
440020,大分県,北部
440030,大分県,西部
440040,大分県,南部
450010,宮崎県,南部平野部
450020,宮崎県,北部平野部
450030,宮崎県,南部山沿い
450040,宮崎県,北部山沿い
460010,鹿児島県(奄美地方除く),薩摩地方
460020,鹿児島県(奄美地方除く),大隅地方
460030,鹿児島県(奄美地方除く),種子島・屋久島地方
460040,奄美地方,奄美地方
471010,沖縄本島地方,本島中南部
471020,沖縄本島地方,本島北部
471030,沖縄本島地方,久米島
472000,大東島地方,大東島地方
473000,宮古島地方,宮古島地方
474010,八重山地方,石垣島地方
474020,八重山地方,与那国島地方
Webブラウザでhttp://HOSTNAME:8080/にアクセスして動作確認を実施する。
/management/healthにGETでアクセスすると、Spring Boot Actuatorのhealthエンドポイント(アプリケーションの正常性情報を表示)を利用できる。behind-proxyプロファイルに定義してあるので、そちらを参照すること。利用例:SPRING_PROFILES_ACTIVE=production,behind-proxysrc/main/resources/static内に配置されており、同フォルダがURLのルートパスと一致する。静的ファイル以外のリクエストURLは、/api/または/management/で始まる。Content type
Image
Digest
Size
96.5 MB
Last updated
about 5 years ago
docker pull ttsutsumiscc/spring-boot-traditional-example