如何在Spring/Tomcat webapp中加载$ {catalina.home} /conf/application.properties?

s.k*_*s.k 13 spring tomcat

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

在StackOverflow和Google上四处看看,我看到很多讨论声称它是可能的.但是,这对我不起作用.根据我的研究建议,我的Spring applicationContext.xml文件包含以下行:

<context:property-placeholder location="${catalina.home}/conf/application.properties"/>
Run Code Online (Sandbox Code Playgroud)

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

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties]
Run Code Online (Sandbox Code Playgroud)

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

cat /Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties
Run Code Online (Sandbox Code Playgroud)

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

Ian*_*rts 22

locationcontext:property-placeholder资源,这意味着如果你只提供一个文件路径(而不是用协议的完整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"/>
Run Code Online (Sandbox Code Playgroud)


小智 13

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

@PropertySource("file:${catalina.home}/conf/application.properties")
Run Code Online (Sandbox Code Playgroud)