0

我在 Mac 上运行 Eclipse,并且我的 tomcat 文件夹位于 /Library/WebServer/apache-tomcat。我在 eclipse 中使用 tomcat 7 服务器并将其配置为使用原始 tomcat 文件夹作为其工作目录。

问题是,当在 Spring 3.1 中使用 PropertyPlaceholderConfigurer bean 并将位置指定为“classpath:database.properties”时,当我启动 tomcat 时,它总是会给我一个 FileNotFoundException。

我尝试将 database.properties 文件放在 tomcat 文件夹的 lib、conf 和根文件夹中。

我没有选择,请帮助!

编辑 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)

所以我终于看到了spring正在寻找文件的完整路径(这是正确的)并且文件实际上就在那里。还有其他建议吗?如果这行得通,其他网络服务器是否也有这个 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 回答