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

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

2019.10.17

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!
    <span class="translation_missing" title="translation missing: ja.layouts.footer.icon_back_to_top">Icon Back To Top</span>
    TOP