タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【Payara】System.getenvで環境変数を取得する方法

前回、Java環境変数を参照する方法を記事にまとめました。

tigertaizo.hatenablog.com

その流れで、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

独自のキーが取得できたことを確認できました! オッケーです!!

なお、サーバ移行が必要になったときには、この手順を忘れないようにしないといけませんね。