如何在春天外化配置?

时间:2013-09-09 19:34:06

标签: java spring configuration

我正在尝试使用spring外部化配置,但无法使其正常工作..

这是我到目前为止所做的:

为每个环境在war文件(src / test / resources /)中创建一个属性文件。 例如:nonprod-key.properties& prod-key.properties,内容如下:

    key.name=NameOfPrivateKey.pfx
    key.password=JustAPasswordForPrivateKey

然后在我的jboss-cxf.xml中,我想读取上面的值如下:

    <import resource="#{systemProperties['environment']}-key.properties" />

    <http:conduit name="*.http-conduit">
        <http:tlsClientParameters
            secureSocketProtocol="SSL">
            <sec:keyManagers keyPassword="${key.password}">
                <sec:keyStore type="PKCS12" password="${key.password}" resource="${key.name}" />
            </sec:keyManagers>
            ...  ... ...
        </http:tlsClientParameters>
    </http:conduit>

然后在eclipse中运行配置 - &gt;参数 - &gt; VM参数

    -Denvironment=nonprod

不幸的是,上述方法无效。 :(

我收到此错误消息:

    class path resource [#{systemProperties['environment']}-key.properties] cannot be opened because it does not exist

我试图使用此处的建议: http://forum.springsource.org/showthread.php?98988-Access-external-properties-file-from-SPRING-context-file&p=332278#post332278

但似乎无法让它发挥作用。我究竟做错了什么? 有人可以举例说明如何做到最好。

谢谢。

-SGB

2 个答案:

答案 0 :(得分:2)

我认为需要在Spring 3.1.x上使用配置文件。我们不是......但是。

无论如何,似乎对我们有用的最终解决方案是使用:

<context:property-placeholder location="classpath:${environment}-key.properties"/>

而不是

<import resource="#{systemProperties['environment']}-key.properties" />

其他所有内容与原始帖子(问题)中列出的相同。

希望有人觉得这很有用。

SGB

答案 1 :(得分:0)

您可以使用Property Place Holder。如果您想要灵活的配置,例如。存储在战争中的默认配置可以被外部配置覆盖,您可以直接使用PropertyPlaceholderConfigurer bean,如:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:ignoreResourceNotFound="true">
    <property name="locations">
        <array>
            <bean class="org.springframework.core.io.ClassPathResource" c:path="${environment}-key.properties"/>
            <bean class="org.springframework.core.io.FileSystemResource" c:path="relative/path"/>
        </array>
    </property>
</bean>

路径属性可以使用SPEL来引用属性或系统env变量。

查看此article和此how to read System environment variable in Spring applicationContext