spring上下文中的可选附加属性文件

时间:2013-06-14 20:20:56

标签: java spring

我有一个我的应用程序使用的默认属性文件,但我还需要能够允许一个额外的属性文件,该文件可以在启动时由-D标志指定,并指向文件系统上的路径(不在我的课程中)。这样做的正确语法是什么?

我尝试了这个,但它不起作用:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" 
        value="classpath:/config/config.properties,file:/${additional.configs}" />
    </bean>

因为抱怨说:

 java.io.FileNotFoundException: class path resource [config/config.properties,file://var/tmp/cfg/qa.properties] cannot be opened because it does not exist

尽管我找到了一些建议以这种方式去做的例子,但看起来逗号消除不起作用。我不认为我可以使用它的位置bean版本列表,因为附加属性文件是可选的。有什么想法吗?我正在使用spring 3.1.1。

谢谢!

更新:使用列表方法有效,但如何使其成为可选项仍然非常出色。现在我使用的是ignoreResourceNotFound = true,但是这并不理想,因为如果有人输入了该属性,那么它就不会失败......

2 个答案:

答案 0 :(得分:1)

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:/config/config.properties</value>
            <value>file:/${additional.configs}</value>
        </list>
    </property>
</bean>

如果仍然无效,您可以尝试指定属性位置不带斜线

<value>file:${additional.configs}</value>

答案 1 :(得分:1)

我认为你应该能够通过在你想要的属性文件上使用通配符来做到这一点。例如

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:/config/config.properties</value>
            <value>file:/${additional.configs}*</value>
        </list>
    </property>
</bean>

显然你需要将additional.configs参数设置为合理的。您不能在没有该文件的系统上留空,因为通配符将匹配所有文件!相反,您可以将其设置为不存在的文件的虚拟值。 e.g。

additional.config=/non-existent-file.txt

如果通配符与任何内容都不匹配,Spring不会抛出错误,因此这会使此属性文件成为可选项,而不必使用ignoreResourceNotFound = true。