【发布时间】:2011-12-24 03:33:36
【问题描述】:
我在 spring 中加载了一个属性文件:
<context:property-placeholder location="classpath:foo.properties"/>
但是,如果我尝试在不同的上下文文件中加载另一个文件,则会出错。
【问题讨论】:
-
你能发布错误/异常吗?
标签: java spring properties
我在 spring 中加载了一个属性文件:
<context:property-placeholder location="classpath:foo.properties"/>
但是,如果我尝试在不同的上下文文件中加载另一个文件,则会出错。
【问题讨论】:
标签: java spring properties
问题 - 如何在 spring config 中使用多个属性文件 *
在 classPath 中创建单独的 prop 文件 例如。 abc1.properties、abc2.propeties、abc2.properties
在类路径中创建一个propConfig.xml class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
类路径:/abc1.properties 类路径:/abc2.properties 类路径:/abc3.properties
为所有其他 beanDefination.xml 和 propConfig.xml 创建组合文件
AllSpringConfig.xml
3.1 确保以下属性 configure 和 locator beans 只定义在一个
文件,即 propConfig.xml
3.2 确保 propConfig.xml 在任何其他配置文件之前,如下所示
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">
<import resource="SpringPropConfig.xml"/>
<import resource="abc1.xml"/> <!-- this may use props from abc1.prop -->
<import resource="abc2.xml"/> <!-- this may use props from abc2.prop -->
<import resource="abc3.xml"/> <!-- this may use props from abc3.prop -->
使用下面来初始化 bean ApplicationContext 上下文 = new ClassPathXmlApplicationContext("AllSpringConfig.xml");
注意 - 确保所有提到的文件都在类路径中或提供文件所在的正确路径。
【讨论】:
如果您需要覆盖属性,您可以这样做:
<context:property-override location="classpath:override.properties"/>
或
如果错误是由于没有找到某个属性,您可以将ignoreUnresolvablePlaceholders设置为true。
或
如果错误是关于未找到资源(并且您可以接受),您可以将ignoreResourceNotFound 设置为 true。
或
如果在查找系统属性时出错:
PropertyPlaceholderConfigurer 不仅在您指定的属性文件中查找属性。默认情况下,如果在指定的属性文件中找不到属性,它还会检查 Java 系统属性。您可以通过使用以下三个受支持的整数值之一设置配置器的 systemPropertiesMode 属性来自定义此行为:
从不 (0):从不检查系统属性
fallback (1):如果在指定的属性文件中无法解析,请检查系统属性。这是默认设置。
覆盖 (2):首先检查系统属性,然后再尝试指定的属性文件。这允许系统属性覆盖任何其他属性源。
【讨论】:
根据来源,您必须提供以逗号分隔的属性文件资源列表。 这应该适合你:
<context:property-placeholder location="classpath:foo1.properties,classpath:foo2.properties"/>
【讨论】: