gpt4 book ai didi

spring - 使用 PropertyPlaceholder 时在 Spring webapp 中忽略 Tomcat 上下文参数

转载 作者:行者123 更新时间:2023-12-04 12:22:15 25 4
gpt4 key购买 nike

我以前使用的是现在已弃用的类 org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer从服务器的文件系统加载属性文件。我定义了以下bean:

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
<property name="locations" value="${config}"/>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="searchContextAttributes" value="true"/>
<property name="contextOverride" value="false"/>
<property name="ignoreResourceNotFound" value="true"/>
<property name="searchSystemEnvironment" value="false"/>
</bean>
config是启动 Tomcat 时传递的参数,即
-Dconfig=/path/to/application.properties

对于 webapp,我还有一个上下文文件:
<Context docBase="/path/to/application.war">
<Parameter name="host" value="localhost" override="false"/>
<Parameter name="port" value="8080" override="false"/>
</Context>

如果 .properties文件,由 -Dconfig 指定参数,包含一些其他 bean 引用的属性,然后是 .properties 中的值使用文件,否则使用上下文 xml 文件中的值。

这允许我使用 WAR 部署一组默认属性,如果需要,我可以指定 .properties文件以覆盖特定值。

现在,我正在更新以使用 Spring 3.1 中的新属性抽象,但我似乎无法弄清楚与之等效的方法是什么?

我以相同的方式部署了相同的上下文文件和 war ,现在我在应用程序中有以下内容:
<context:property-placeholder
location="${config}"
system-properties-mode="OVERRIDE"
ignore-resource-not-found="true"
ignore-unresolvable="true"/>

这会查找并使用属性文件中的属性,但它不使用上下文 XML 文件中的值。

使用这个新的属性占位符时,如何让我的应用程序使用上下文参数?

谢谢。

最佳答案

总结问题是,当使用 Spring 3.1 中引入的新 Property Placeholder 命名空间时,servlet 上下文文件中的上下文参数没有被用于解析占位符。

我想出了一个解决方案,如下

<context:property-placeholder location="${config}" local-override="true" ignore-resource-not-found="true"/>

我可以使用 JVM arg 在本地文件系统上指定一个或多个 *.properties 文件,例如:
-Dconfig=/path/app.properties

如果在检查 app.properties 后无法解析占位符属性文件,然后检查 Servlet 上下文参数。

这允许我在 web.xml 中使用上下文参数来获得默认值,并且在我需要的地方,我可以通过使用 config 指定 *.properties 文件的位置来覆盖这些值。 JVM 参数。

让它以这种方式工作的关键是包含 local-override="true" ,默认为假。我不完全确定它是否有意义,因为该属性的描述是:

Specifies whether local properties override properties from files. Default is "false": Properties from files override local defaults.



如果 app.properties 中存在相同的属性键和 web.xml app.properties 中的值用来。

关于spring - 使用 PropertyPlaceholder 时在 Spring webapp 中忽略 Tomcat 上下文参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17492429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com