お役立ちコンテンツ | フリーランスエンジニアの案件・求人なら【テクフリ】

PlayFramework(Java)で開発環境と本番環境の違いで苦労した

2024.07.31

yamazaki_k

Java

目次

今回の苦労した点は

conf/内のファイルが読め込めない!! というもの。

やりたいこととしては、
conf/内に何かしらのファイルを置いておいて、application.confに記述したパスを参照して、Javaで読み込むというもの。(PlayでJava?という気持ちは内にしまっておいてください。。。)

開発環境で動作させるrunやstartですと問題ないのですが、本番環境で運用する為のstageやdistをして実行すると読め込めないという状況が起きました。

まずは、

開発環境で動作したコード

//application.confを読み込みにいく
Config config = ConfigFactory.load();

//ファイルパスを取得
String filePath = config.getString("filePath");

//ファイルパスからFileインスタンスを生成
File file = new File(filePath); //NullPointerException

このコードで実行すると、ファイルが見つかりません。


ConfigFactory.load()を利用するとデフォルトでapplication.confを読みにいくのですが、runやstartと違ってstageやdistしたパッケージ内にはconf/が存在していないのでパスが違ってエラーになります!!



ではどうしたものか・・・
色々調べてみると、

便利なものが存在しました!!

play.Application.getFile(String relativePath)

このメソッドはアプリケーションのルートパスからの相対ファイルを取得するというもの。
アプリケーションのルートパスの参照ならconf/も存在するので、ファイルも取得出来る!!

それでは、

本番環境でも動作したコード

//application.confを読み込みにいく
Config config = ConfigFactory.load();

//ファイルパスを取得
String filePath = config.getString("filePath");

//ルートパスからファイルを取得
File file = Play.application().getFile(filePath);

これでファイルを取得出来ました!!
因に、application.confに記述するパスは
conf/path
となります。

フリーランス案件を探す

今すぐシェアしよう!

B!