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

解决方案 »

  1.   

    没有!我们通常都把这些开关定义在.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}付值
      

  2.   

    修正一下,是这么写${OPEN_SMS},然后用程序去判断逻辑!这么做虽然不能达到你的目的,但是把配置项集中起来,总比在复杂的多个xml中配置要方便
      

  3.   

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