如何在Spring/Tomcat Web应用程序中加载${catalina.home}/conf/application.properties
?
环顾StackOverflow和谷歌,我看到了许多声称这是可能的讨论。然而,这对我来说并不奏效。根据我研究的建议,我的Spring applicationContext.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
因此,这条道路显然是正确的。这是网络应用程序安全问题还是Tomcat服务器配置问题?
context:property-placeholder
的location
是资源,这意味着如果您只提供一个文件路径(而不是带有协议的完整URL),那么该路径将根据Web应用程序的基本目录进行解析-它正在尝试加载不存在的/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"/>
对于基于注释的配置,您可以使用:
@PropertySource("file:${catalina.home}/conf/application.properties")