Spring boot 小ネタ

こんにちわ、猫好きリーマンのほげPGです。
今回は 以下の小ネタを紹介します。

・別名の設定ファイルを読み込ませる
・設定値一覧を表示する
・velocityをテンプレートエンジンで使う
・thymeleafをViewとは別のテンプレートエンジンでも使う
・DataSource名がぶつかるのを回避する設定
・Tomcat起動バッチ

1、別名の設定ファイルを読み込ませる

環境変数 spring.config.name に application,env と指定すれば、application.properties(yml)以外にenv.properties(yml) も読み込んでくれます。

WebApp.java

※tomcatでも動くようにしてみました。同じコードなのがいまいちなのですが、わざわざstaticメソッドを作るのもいやなので妥協しました。

実際にenv.ymlに以下を定義して実行すると、読み込まれたのが確認出来ます。

HogeConfig.java

 

2、設定値一覧を表示する

StandardEnvironmentから気合で取れました。

※actuatorを使えば簡単に確認できます。

Pom.xml に以下を指定

application.yml に以下を設定

webアプリを起動したら、以下のURL(上:設定、下:bean)をpostmanやcurlで呼出、jsonを整形。

http://localhost:8080/hoge/actuator/env

http://localhost:8080/hoge/actuator/beans

 

3、velocityをテンプレートエンジンで使う

Spring boot 2 だと自動で設定してくれないので自前で設定する必要があります。

 

Pom.xml

 

application.yml

※prefixやsuffixを設定する機能はClasspathResourceLoaderには用意されていません。

 

HogeConfig.java

 

テンプレート src/main/resources/mail/hoge.vm

 

使用サンプル

 

実行結果

 

4、thymeleafをViewとは別のテンプレートエンジンでも使う

Webのviewerでも使いたいので、TemplateEngineはnewせず、TemplateResolverをいい感じに生成するだけになります。

 

application.yml

※重要なのはorderでリゾルバの順序を指定するのとcheck-existenceをtrueにしてテンプレートが見つからなかった場合に例外にしないことです

 

HogeConfig.java

 

テンプレート src/main/resources/mail/hoge-body.txt

 

使用サンプル

 

実行結果

 

WebView が機能することも確認。

ブラウザからほげる

ログ

 

5、DataSource名がぶつかるのを回避する設定

DataSourceをデフォルト設定で使っているWebアプリが2つ以上動作しようとすると、起動時に以下の例外が出ます。

Unable to register MBean [HikariDataSource (null)] with key ‘dataSource’; nested exception is javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=HikariDataSource

これを回避する設定は以下となります。

※hoge-webは自分自身のアプリ名など

 

6、Tomcat起動バッチ

環境変数設定やサービス設定をしたくないので、以下のバッチをTomcatフォルダに置いて起動させています。なんとなく紹介します。

TOMCAT_START.bat

 

プロジェクト一式

HogeWeb.zip

 

今回はここまで。

次の記事

宮田莉朋選手2020年シーズン