我有一个在tomcat容器中运行的基于Spring的Web应用程序,我想维护两个不同的配置文件:
当应用程序在tomcat中运行时,我有一个正常工作的弹簧配置
APP-context.xml中
<context:property-placeholder
ignore-resource-not-found="true"
ignore-unresolvable="true"
system-properties-mode="OVERRIDE"
location="classpath:default.properties,
file:${catalina.home}/conf/app.properties"/>
但是当我尝试在集成测试中使用此配置时,在tomcat容器之外,加载applicationContext失败:
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308)
...
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0' defined in null: Could not resolve placeholder 'catalina.home'
at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:287)
有没有办法告诉Spring忽略位置文件:$ {catalina.home} /conf/app.properties什么时候catalina.home属性没有在当前上下文中设置?
答案 0 :(得分:0)
您可以设置ignore-resource-not-found
来解决此问题。
试试这个:
<context:property-placeholder
ignore-resource-not-found="true"
ignore-unresolvable="true"
system-properties-mode="OVERRIDE"
location="classpath:default.properties,
file:${catalina.home}/conf/app.properties"/>
spring-context.xsd的代码片段:
<xsd:attribute name="ignore-resource-not-found" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation><![CDATA[
Specifies if failure to find the property resource location should be ignored.
Default is "false", meaning that if there is no file in the location specified
an exception will be raised at runtime.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
答案 1 :(得分:0)
由于您有一个上下文,某些PP值可能未解析,您可以尝试使用default variant
作为属性:
file:${catalina.home:}/conf/app.properties
在这种情况下,如果没有catalina.home
属性,则将路径前缀解析为空字符串,例如在System.getProperties()
中,我想是Tomcat的情况。
之后ignore-resource-not-found="true"
完成了这些工作。
答案 2 :(得分:0)
我建议使用弹簧配置文件来启用/禁用属性文件。
在tomcat上运行tomcat时,在tomcat&#34;或&#34; web&#34;配置文件并将app.properties加载到该配置文件中。