我以前使用过现在已弃用的类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文件中的值。
在使用这个新的属性占位符时,如何让我的应用程序使用上下文参数?
感谢。
答案 0 :(得分:4)
总结问题的是,在使用Spring 3.1中引入的新Property Propertyholder命名空间时,servlet上下文文件中的Context Parameters未用于解析占位符。
我找到了一个解决方案,其中包含以下内容
<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
JVM arg指定* .properties文件的位置来覆盖这些值。
让它以这种方式工作的关键是包含local-override="true"
,默认情况下为false。我不完全确定它有意义,因为该属性的描述是:
指定本地属性是否覆盖文件的属性。默认 是“false”:文件中的属性覆盖本地默认值。
如果app.properties
中存在相同的属性键,则使用web.xml
app.properties
中的值{/ p>
答案 1 :(得分:1)
如果您想利用application.properties,有两种方法可以做到这一点。
<!-- allows for ${} replacement in the spring xml configuration from the
system.properties file on the classpath -->
<util:properties id="appProperties" location="classpath:application.properties"/>
<context:property-placeholder location="classpath:application.properties"/>
util标签允许您使用Property类来读取整个应用程序的属性。例如:
@Autowired
public MyPropertyReader(Properties appProperties) {
String prop1 = appProperties.getProperty("my.address");
String prop2 = appProperties.getProperty("my.version");
}
如果要使用上下文文件中的值,请使用context:property-placeholder标记。然后您可以将您的值用作
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" p:brokerURL="${jms.primary.server}"/>
其中例如app.properties中的jms.primary.server = 172.168.10.18:6161。