13

如何加载${catalina.home}/conf/application.propertiesSpring / Tomcat webapp?

在 StackOverflow 和 Google 上环顾四周,我看到许多声称这是可能的讨论。但是,它只是不适合我。根据我的研究建议,我的 SpringapplicationContext.xml文件包含以下行:

<context:property-placeholder location="${catalina.home}/conf/application.properties"/>

但我在日志中得到了这个:

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties]

从日志条目中,我可以看到它${catalina.home}正在正确扩展。当我在文件中手动展开它时,applicationContext.xml它返回相同的错误。以下按预期返回 application.properties 文件的内容:

cat /Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties

所以路径显然是正确的。这是 webapp 安全性还是 Tomcat 服务器配置问题?

4

2 回答 2

22

locationacontext:property-placeholder是一个Resource ,这意味着如果您只提供一个文件路径(而不是带有协议的完整 URL),那么该路径将针对 webapp 的基本目录进行解析 - 它正在尝试加载/Users/username/Servers/apache-tomcat-6.0.36/webapps/<appname>/Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties,这确实不存在。如果您为其添加前缀,file:它将按您的要求工作:

<context:property-placeholder location="file:${catalina.home}/conf/application.properties"/>
于 2013-07-12T08:35:25.697 回答
13

对于基于注释的配置,您可以使用:

@PropertySource("file:${catalina.home}/conf/application.properties")
于 2013-09-29T19:39:55.910 回答