2017-08-07 3 views
0

私はCloud Foundry上に.warとして展開されるSpringブートアプリケーションを用意しています。それはsrc/main/resources/フォルダに保存されている多くのプロパティファイルを持っています。アプリケーションは、これらのプロパティを読み取る依存関係としてカスタムライブラリを使用します。WARブートファイルとしてアプリケーションを展開する際にリソースが見つかりません

たとえば、依存関係の1つはカスタムロガーライブラリで、実行時にlog.propertiesファイルを読み取ります。現在、これらのライブラリのほとんどは、ClassLoader.getSystemresource().getFile()関数を使用してプロパティを読み取ります。それは依存関係であるため、ライブラリを編集することはできません。

STSによるテスト中は、すべてがローカルで動作します。しかし、.warファイルが生成され展開されると、これらのリソースファイルを見つけることができず、したがって失敗します。すべてのプロパティファイルは.warにあり、SpringのClassPathResource()メソッドを使用してファイルにアクセスすると、そのファイルにアクセスできます。

私はファイルやその他の同様のソリューションの代わりにストリームとしてファイルを読むことをアドバイスするスタックオーバーフローで同様の質問を見てきましたが、私は依存関係のソースコードを変更することができないので、これを達成する方法はありますか?

私の問題は、この問題と非常によく似ていますが、与えられた解決方法を適用することができないという点を除けば、Classpath resource not found when running as jarです。

編集

以下、要求されるようにコードスニペットは

ファイルログファイル= ClassLoader.getSystemResource( "log.properties")ではgetFile()。

これは機能しません。 where as

ファイルlogFile =新しいClassPathResource( "log.properties")。getFile();.働くしかし、私はそれが瓶の中にあり、私はそれを変更することはできませんので、最初のコードスニペットが必要です。

+0

リソースをロードするためのコードを投稿することは本当に役に立ちます –

+0

合意しました。コードスニペットを投稿してください。クラスパスからどのようにファイルにアクセスしようとしているのかを正確に確認する必要があります。 – Ben

+0

可能であれば、スタートアッププログラムclasspathのクラスパスにファイルを追加してください。クラウドファウンドリについてはわかりませんが、Tomcatでは - Tomcatが起動しているときにクラスパスに外部フォルダを追加して、それは動作するはずです。これは、getSystemResourceがSystem Classloader内のファイルを検索するためです。 – Hima

答えて

0

マイナーチェンジでjarを修正しました。この問題は、ClassLoader.getSystemResourceが、ファイルが戦争の中で圧縮されているため、システムクラスローダー内のファイルを検索するために発生します。 変更済み

ファイルLogfile = ClassLoader.getSystemResource( "log.properties")。getFile();

にファイルログファイル= this.getClass()のgetClassLoader()getSystemResource( "log.properties")はgetFile()。。。。

それが動作し始めました。

関連する問題