前回、Javaで環境変数を参照する方法を記事にまとめました。
その流れで、Payara ServerでもLinuxに登録した環境変数をアクセスしようと試したところ、NPE(ヌルポ)が発生してしまいました!!
なぜ???
今回、メンバーに調査してもらい、その解決方法がわかったのでまとめておきたいと思います。
そもそも、APサーバには、DBとのコネクション接続設定やメール送信設定などコンテナ上で管理できるものが多くあります。
「環境変数で管理するものなど無いだろう!」という質問は、ここでは忘れてください。
systemdの構成ファイルに環境変数を組み込む
もともとのPayara管理用のファイルが用意されているかと思います。
その構成ファイルに「EnvironmentFile」を追記し、その参照先ファイルの中にプロパティを定義することで、Payaraのアプリから環境変数として参照することができるようになりました!
/lib/systemd/system/payara.service
[Unit] Description=Payara Server After=network.target remote-fs.target [Service] Type=forking PIDFile=/opt/payara/163/payara41/glassfish/domains/domain1/config/pid ExecStart=/opt/payara/163/payara41/bin/asadmin start-domain domain1 ExecReload=/opt/payara/163/payara41/bin/asadmin restart-domain domain1 ExecStop=/opt/payara/163/payara41/bin/asadmin stop-domain domain1 TimeoutStartSec=300 TimeoutStopSec=30 User=payara EnvironmentFile=/opt/payara/environment.properties [Install] WantedBy=multi-user.target
/opt/payara/environment.properties
SECRET_KEY1=1234567890 SECRET_KEY2=0987654321
設定変更後は、設定ファイルの再読込してからサービスを再起動します。
> sudo systemctl daemon-reload > sudo systemctl restart payara.service
動作確認
アプリケーションServerに配備されたアプリから、System.getenv命令を実行してみます。
logger.error(System.getenv()); ↓ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin SHELL=/bin/bash NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat LOGNAME=payara XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt PWD=/ USER=payara LANG=ja_JP.UTF-8 HOME=/home/payara SHLVL=0 SECRET_KEY1=1234567890 SECRET_KEY2=0987654321
独自のキーが取得できたことを確認できました! オッケーです!!
なお、サーバ移行が必要になったときには、この手順を忘れないようにしないといけませんね。