如何在弹簧xml配置中注入环境变量?

AWS 在 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Java.managing.html 中谈到了在设置环境变量之后。一切都很好,除了我不能在我的Spring XML配置代码中调用,也不能调用资源包快捷方式,因为资源包本身必须以某种方式提取这些环境变量来为它们服务。你能帮我把这个例子配置转换成使用环境变量吗?:-)System.getProperty("JDBC_CONNECTION_STRING")System.getProperty

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://secrethost:007/whois?autoReconnect=true" />
    <property name="username" value="bond" />
    <property name="password" value="abuginsidemistycorner" />
    <property name="initialSize" value="100" />

    <property name="minEvictableIdleTimeMillis">
        <value>300000</value>
    </property>

    <property name="timeBetweenEvictionRunsMillis">
        <value>60000</value>
    </property>

    <property name="maxIdle" value="20" />
</bean>

我无法理解人们在这里做什么:

我可以对 Spring FileSystemResource 使用基于环境变量的位置吗?哪个适用于最近的春季版本?


答案 1

首先向配置中添加一个元素。<context:property-placeholder .. />

<context:property-placeholder />

然后只需在配置中使用占位符即可。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="${JDBC_CONNECTION_STRING}" />
    <property name="username" value="bond" />
    <property name="password" value="abuginsidemistycorner" />
    <property name="initialSize" value="100" />
    <property name="minEvictableIdleTimeMillis" value="30000" />
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <property name="maxIdle" value="20" />
</bean>

确保占位符名称与您设置的变量匹配。


答案 2

如果使用类 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 来加载属性文件,则可以将属性设置为值 。systemPropertiesModeSYSTEM_PROPERTIES_MODE_OVERRIDE

在春天.xml你会有这个豆子:

<bean id="propertyPlaceholder"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="locations">
        <list>
            <value>classpath://file.properties</value>                  
        </list>
    </property>
</bean>

弹簧将按如下方式加载系统属性:

在尝试指定的属性之前,请先检查系统属性。这允许系统属性覆盖任何其他属性源。

这样,您应该能够将系统属性作为普通属性进行读取。


推荐