<bean id="Mybean" class="Bean">
<property name="config" ref="dev"/>
</bean>
<bean id="dev" class="Dev">
<property name="x" ref="Dev1">
<property name="y" ref="Dev2">
<property name="z" ref="Dev3">
</bean>
<bean id="stag" class="Dev">
<property name="x" ref="Stag1">
<property name="y" ref="Stag2">
<property name="z" ref="Stag3">
</bean>
在上面的场景中,bean config
中的MyBean
属性从环境变为环境。在开发时,配置的引用更改为dev
。在分段中,引用更改为stag
。在弹出文件中检查时出现问题。在签入之前,我们必须每次分析配置的引用。如果配置了dev
值的配置引用,我们可能需要解释很多问题。
是否有任何解决方案可以使其自动化? 注意:Spring版本是2.0.1
答案 0 :(得分:10)
使用Spring的PropertyPlaceholderConfigurer,删除未使用的bean:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>env.properties</value>
</property>
</bean>
<bean id="Mybean" class="Bean">
<property name="config" ref="config"/>
</bean>
<bean id="config" class="Config">
<property name="x" ref="${x}">
<property name="y" ref="${y}">
<property name="z" ref="${z}">
</bean>
并且env.properties文件包含以下属性:
x=Dev1
y=Dev2
z=Dev3
或
x=Stag1
y=Stag2
z=Stag3
答案 1 :(得分:4)
例如:
<beans>
<bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location"><value>env.properties</value></property>
</bean>
<bean id="Mybean" class="Bean">
<property name="config" ref="${env}"/>
</bean>
</beans>
并且您需要将env = dev
键值添加到env.properties文件
答案 2 :(得分:3)
假设您的意思是Spring 3.1,而不是Spring 2.1(它不存在),那么您可以使用新的&#34;环境配置文件&#34; 3.1中引入的功能。这允许您为每个环境定义一组bean,然后选择&#34; active&#34;一个在运行时。
有关示例,请参阅此SpringSource Blog Entry。
答案 3 :(得分:2)
您可以使用PropertyPlaceholderConfigurer
或使用@Profile
另见
答案 4 :(得分:2)
PropertyPlaceholderConfigurer
就是答案,但我想你可以在不需要为每个环境更新属性文件的情况下实现这一点。
我的建议如下:
PropertyPlaceholderConfigurer
,但不创建属性文件PropertyPlaceholderConfigurer
首先尝试在属性文件中查找值,但如果失败,将在系统属性中查找一个值 所以你需要做的就是以同样的方式定义两个bean,即dev
和stag
..这是一个很好的方法,因为你清楚地展示了不同的配置...如果你还添加了一些别名来清楚地显示你想要使用的设置,它会有所帮助。
接下来,传入一个系统属性,定义您所处的模式...并理想地明确设置PropertyPlaceholderConfigurer
以使用系统属性。
所以..你的配置看起来像这样
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
systemPropertiesMode="2"/>
<bean id="Mybean" class="Bean">
<property name="config" ref="${launch.mode}"/>
</bean>
<bean id="dev" name="dev_mode" class="Dev">
<property name="x" ref="Dev1">
<property name="y" ref="Dev2">
<property name="z" ref="Dev3">
</bean>
<bean id="stag" name="staging_mode" class="Dev">
<property name="x" ref="Stag1">
<property name="y" ref="Stag2">
<property name="z" ref="Stag3">
</bean>
然后,您可以在启动时以下列方式传入属性
-D<property-name>=<value>
所以在这种情况下你会使用
-Dlaunch.mode=dev_mode
或者
-Dlaunch.mode=staging_mode
您无需触摸任何配置文件。
关于systemPropertiesMode
的进一步说明,接受的值如下:
希望有所帮助:)
注意:此建议仅适用于Spring&lt; 3.1,从3.1开始,推荐的方法是使用@Profile
答案 5 :(得分:1)
Spring提供了一种称为属性占位符的机制。这样,您可以在数据库/属性文件中设置某些属性,spring将在启动时填充它们。
用于此目的的课程位于here。