我有一个特殊的要求,就是从系统环境变量设置一些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文件之外的某个环境变量中被外部化。
春天有没有优雅的方法来实现同样的目标?
答案 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