日期:2014-05-20  浏览次数:20621 次

Spring里面有没有类似If语句的功能,能让用户更容易的修改配置?
我们现在有一套Web程序,需要部署到四个服务器上,每个服务各有自己的数据库和工作流服务器,目前,这些数据库和工作流服务器的配置都放在了Spring的多个配置文件中。在我们发布版本的时候,是这样做的:一种方法是手工修改配置文件,启用目标机器对应的设置,关闭用不着的设置;或者是将四套已经配置好的XML文件来覆盖工程里面对应的文件。这两种方法都比较麻烦,容易出现错误。

请问大家Spring里面是否有If语句这样的设置,能让我修改一个值就启用某个设置而关闭其它设置?如果没有的话,大家遇到这种情况是如何处置的呢?

------解决方案--------------------
没有!

我们通常都把这些开关定义在.properties文件里面,然后再spring配置文件内引用.properties文件,这样就可以集中配置.

例如config.properties文件内容如下:

==================================
#是否开启短信功能,true开启
OPEN_SMS = false
==================================

spring内加入如下代码:

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

配置bean的时候使用{OPEN_SMS}付值
------解决方案--------------------
修正一下,是这么写${OPEN_SMS},然后用程序去判断逻辑!

这么做虽然不能达到你的目的,但是把配置项集中起来,总比在复杂的多个xml中配置要方便
------解决方案--------------------
简而概之,就是要把服务器特定的配置集中起来,哪怕直接替换一个文件,前提也是要集中,才好操作。
------解决方案--------------------
这样行不?

定义系统变量(在启动命令行加-Dmy.os=win之类的),
然后在Spring的那些配置文件间Import的时候这么写:
<import resource="controllers-${my.os}.xml"/>
<import resource="services-${my.os}.xml"/>