0

MacでEclipseを実行していて、Tomcatフォルダーが/ Library / WebServer/apache-tomcatにあります。eclipse内からtomcat7サーバーを使用しており、元のtomcatフォルダーを作業ディレクトリとして使用するように構成しました。

問題は、Spring3.1でPropertyPlaceholderConfigurerBeanを使用し、場所を「classpath:database.properties」として指定すると、Tomcatを起動すると、常にFileNotFoundExceptionが発生することです。

database.propertiesファイルをtomcatフォルダーのlib、confおよびrootフォルダーに配置してみました。

私は選択肢がありません、助けてください!

編集1

Guido Simoneのソリューションを試しましたが、次のようになりました。

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: /Library/WebServer/apache-tomcat-7.0.32/conf/database.properties (No such file or directory)

だから私はついに春がファイルを探しているフルパス(正しい)を見て、ファイルは物理的にそこにあります。他に何か提案はありますか?そして、これが機能する場合、他のWebサーバーにもこのcatalina.base変数がありますか、それともこのTomcat固有ですか?後の段階でプラットフォームの独立性が必要だからです。

4

1 に答える 1

1

この理由だけで、クラスパスURLを使用しない傾向があります。さまざまなランタイム環境でクラスパスがどのように構成されているかを正確に追跡する必要はありません。編集される可能性が高い(そしてWARファイルに入ることができない)プロパティファイルについては、次のようなものをお勧めします。

  <bean id="propertyPlaceholderConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="file:${catalina.base}/conf/database.properties"/>

これで、ファイルが他のすべての構成要素とともにconfフォルダーにあることは明らかです。

[アップデート]

catalina.baseは間違いなくTomcat固有であるため、上記の正確なXMLは他のアプリケーションサーバーに移植できません。プレフィックスを続行する場合file:は、もう少し作業を行い、すべての構成ファイルがどこにあるかを示すために独自のシステムプロパティを定義する必要があります(file:${my.product.conf}/database.properties

起動時にこのプロパティを設定する方法を理解するには、各アプリサーバーのドキュメントを確認する必要があります。

FileNotFoundException完全な絶対パスが綴られている今でも、なぜあなたがまだ得ているのか分かりません。私が考えることができる唯一のことは、おそらくファイルが実際にはあなたが思っている場所ではないということです:):):)ごめんなさい。

于 2012-11-02T16:39:01.250 に答える