在Spring beans.xml中使用环境变量

时间:2015-04-28 08:37:06

标签: spring spring-4

我有一个特殊的要求,就是从系统环境变量设置一些bean的值,春天这个可能吗?

伪代码

Visual Studio cannot open a designer for the file because the class within it does not inherit from a class that can be visually designed

现在,这些RabbitUserName和RabbitPassword在.war文件之外的某个环境变量中被外部化。

春天有没有优雅的方法来实现同样的目标?

2 个答案:

答案 0 :(得分:1)

这应该有用。

<bean id="connectionFactory"
    class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
        <constructor-arg value="testhost" />
        <property name="username" value="#{systemProperties['RabbitUserName']}" />
        <property name="password" value="#{systemProperties['RabbitPassword']}" />
    </bean>

答案 1 :(得分:0)

要获取系统环境变量,可以将其用作值:

#{ systemEnvironment['RabbitUserName'] }

另一个答案中提到的#{ systemProperties['RabbitUserName'] }不会为您提供系统环境变量,而是会读取Java系统属性,即您在启动JVM时可以在命令行上设置的那些内容,例如:< / p>

java -DRabbitUserName="reisen" etc...

但是,与环境变量相比,这可能是连接凭据的更好位置选择,例如,您可以为不同的启动配置进行不同的配置,并且其暴露程度也比环境值小-所有其他应用程序也具有完全可见性。

有关环境变量和系统属性之间差异的更多信息,请参见Java system properties and environment variables

这些是Spring Expression Language(SpEL)的示例,例如,您也可以将其与注释元数据一起使用

@Value("#{ systemEnvironment['RabbitUserName'] }")

有关SpEL的更多信息,您可以在此处查看Spring参考:https://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/expressions.html