マイクロサービスなWebサーバを実現するHelidonを実務で使っていく!
その2 Helidonプロパティを動的にオーバーライドする!
こんにちは、エンジニアのtakemuraです。前回鼻息荒くHelidonを実務で使っていくと書いておいて全く一般的なさわりしか書けませんでした。ですが、今回ようやくちょっと実際に使っていく上で約に立ちそうな事を書いて行きたいと思います
Helidonプロパティとは
前回の記事でも、port番号の件でちょっと触れたのですが、Helidonが稼働する上でいくつかの事前定義プロパティ(プレフィックスプロパティ)と、ユーザが自分で自由に定義できるカスタムプロパティを定義することができます。
ファイルは、/src/main/resources/META-INFフォルダにある「microprofile-config.properties」にスタンザ形式(プロパティ=値)で書いていく感じです
事前定義プロパティについて
Helidonがデフォルトで用意しているWebサーバに食わせるプロパティが最低限定義されています。
# Microprofile server properties
server.port=8080
server.host=0.0.0.0
カスタムプロパティについて
開発者が、自分のアプリケーションに取り込むために自由に定義するプロパティです。
例えば、Helidonのサンプルアプリには以下が入っています。
# Application properties. This is the default greeting
app.greeting=Hello
例えば、これを
# Application properties. This is the default greeting
app.greeting=Hello Helidon!
のように変更してから、以下コマンドでビルドします。(サンプルアプリはHelloの出方に現在のカスタムプロパティの設定内容(app.greeting=Hello)を前提に自動単体テストが組まれてしまっているのでテストをスキップしないとエラーになります)
mvn package -DskipTests=true
ビルドしたら、下記コマンドで実行します。
java -jar target/myproject.jar
ブラウザを開いて、以下URLを入力します。
http://localhost:8080/simple-greet
結果として、プロパティ設定が結果に反映していることが確認できます。
現実的な話として、プロパティを設定するたびにビルド・デプロイ・再起動が発生するのはどうなのか
と考えるのが普通でしょう。例えば環境ごとにHelidon設定値を変更しながら稼働させなくてはならない場合、各環境ごとに別々にビルドが必要になるのは結構面倒ですし、ナンセンスであると思います。
Helidonでは環境変数、シェル変数などで実行時にHelidonプロパティをオーバーライドして動かすことが可能です
たとえば、さきほどのapp.greetの文言を稼働時にオーバーライドしたい場合は、Helidonを起動する前に変数設定を以下のように行います。
Windowsなら
set APP_GREETING=KONNNICHIWA! HELIDON!
Unix系なら
export APP_GREETING=KONNNICHIWA! HELIDON!
そして、あとは起動するだけです
java -jar target/myproject.jar
すると、リクエストURLが同じでも結果が変化していることがわかります
カスタムプロパティだけではなく、事前定義プロパティでも利用可能です。
たとえば、起動するポート番号を変えたくなった場合は以下のようにします。
C:\downloaded\myproject>set SERVER_PORT=8090
C:\downloaded\myproject>java -jar target/myproject.jar
これでHelidonが起動しますので、アクセスするportが8090になっていることが確認できます。
環境変数・シェル変数に設定する変数名について
もうすでに上記のサンプルでお気づきのことと思いますが、Helidonプロパティ→環境変数への変換は以下のルールで行います。
①設定値を全部大文字へ
②「.」を「_」に置き換え
で変換した値を設定すればOKです。例えばserver.portだったらSERVER_PORTですね
長い場合でもこのルールを適用します。
aa.bb.cc.dd.ee.ff→AA_BB_CC_DD_EE_FF
今回は、Helidonプロパティのオーバーライドについて書きましたが、次回は、企業アプリとしてデプロイする場合に必ず求められるSecureなHelidon環境についてちょっと書いてみたいと思います。