を見つけるために、Herokuのはできません私はHerokuのにSpringアプリケーションをアップロードしますが、アプリケーションは次のエラーでクラッシュした:XML設定ファイル
java.io.FileNotFoundException: class path resource [com/myname/myapp/config/dao-context.xml
ファイルが間違いであり、それはGITであり、そしてアプリローカルで正常に実行されます。
ここで何が起こっているのですか?
を見つけるために、Herokuのはできません私はHerokuのにSpringアプリケーションをアップロードしますが、アプリケーションは次のエラーでクラッシュした:XML設定ファイル
java.io.FileNotFoundException: class path resource [com/myname/myapp/config/dao-context.xml
ファイルが間違いであり、それはGITであり、そしてアプリローカルで正常に実行されます。
ここで何が起こっているのですか?
を、私は私のDAOのXML設定ファイルを変換することによって、問題を克服Java Configメソッドを使用しているため、SpringではXMLファイルが不要になりました。これはXMLファイルを見つけることができないという問題を直接解決しませんでしたが、私は現在、より現代的で控えめなJava Configメソッドを使用しています。
私はローカルで実行しているときにクラスパス上のファイルをファイルシステム上の通常のファイル(すなわち、JARの内部ではない)としてピックアップしていると思われます。 Herokuの上
、それは通常のファイルではなく、次のようになります入力ストリームとして読まなければならないことを意味している、JARファイルの中に、おそらくです:
ClassLoader cl = this.getClass().getClassLoader();
InputStream inputStream = cl.getResourceAsStream("com/myname/myapp/config/dao-context.xml");
することができますおそらくあなたのProcfile
と同じコマンドを実行して、問題をローカルで再現してください。
そうでない場合は、そのファイルには、このコマンドを実行することにより、Herokuの上に存在することを確認してください:この質問への将来の訪問者のための
$ heroku run ls com/myname/myapp/config/dao-context.xml
ありがとうございました。私は現在、注釈付きの '@ImportResource({" classpath:com/myname/myapp/config/dao-context.xml "})'でそのファイルを参照しています。 ClassLoaderをどのように使用すればよいですか? –