私は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();.働くしかし、私はそれが瓶の中にあり、私はそれを変更することはできませんので、最初のコードスニペットが必要です。
リソースをロードするためのコードを投稿することは本当に役に立ちます –
合意しました。コードスニペットを投稿してください。クラスパスからどのようにファイルにアクセスしようとしているのかを正確に確認する必要があります。 – Ben
可能であれば、スタートアッププログラムclasspathのクラスパスにファイルを追加してください。クラウドファウンドリについてはわかりませんが、Tomcatでは - Tomcatが起動しているときにクラスパスに外部フォルダを追加して、それは動作するはずです。これは、getSystemResourceがSystem Classloader内のファイルを検索するためです。 – Hima