Spring MVC有几种配置

时间:2011-01-16 14:49:28

标签: java spring testing spring-mvc

对于我的spring-mvc应用程序,我创建了几种类型的配置(unittest,integration,qa,production)。所有配置都在一个war文件中,因此我只创建了一种类型的应用程序。应采取哪种配置应由运行应用程序的服务器决定。

要决定应该使用哪种配置,我必须查看一个文件。之后我可以决定spring mvc应该使用哪种配置。

现在按惯例,总是使用-servlet.xml。有没有办法动态决定采用哪个配置?

此致 迈克尔

3 个答案:

答案 0 :(得分:4)

这是我使用的解决方案。它运作得很好:

  • 将配置差异放在属性文件中。
  • 使用占位符保留一个Spring xml。
  • 使用PropertyPlaceholderConfigurer设置属性。
  • PropertyPlaceholderConfigurer可以使用系统属性来解析要加载的属性文件的名称。
  • 在初始化PropertyPlaceholderConfigurer之前,使用您的环境名称设置系统属性(您可以在从文件中读取值的bean中执行此操作)。

你去吧!将干净地检测环境,并加载相关属性!

无需等待Spring 3.1,您今天可以使用此解决方案3.0。

答案 1 :(得分:0)

我有相同的设置,但我使用maven以不同的方式构建WAR。我在上下文中使用PropertyPlaceholderConfigurer:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

   <context:property-placeholder location="classpath:datasource.properties" ignore-unresolvable="true" />

   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="${jdbc.driver}"
      p:url="${jdbc.url}"
      p:username="${jdbc.username}"
      p:password="${jdbc.password}" />

   <!--other beans-->
</beans>

然后我设置了一个环境文件夹:

src
--main
----environments
------dev
--------datasource.properties
------cert
--------datasource.properties
------prod
--------datasource.properties

然后在我的Maven pom中,我使用构建配置文件根据maven命令中的参数标志复制环境文件夹中的任何内容:

<profiles>
        <profile>
            <id>environment</id>
            <activation>
                <property>
                    <name>environment</name>
                </property>
            </activation>
            <build>
                <resources>
                    <resource>
                        <directory>
                            src/main/environments/${environment}
                        </directory>
                    </resource>
                </resources>
                <!-- other build config and plugins -->

以下命令:

mvn clean -Denvironment=dev install

会将dev datasource.properties复制到war

答案 2 :(得分:0)

毕竟我使用的是PropertyPlaceholderConfigurer,但与Axel提到的略有不同:我只从配置中加载一个属性并使用它来确定要使用的导入。由于https://jira.springframework.org/browse/SPR-1332我无法使用文件存储实例类型,但必须使用环境变量。

<bean id="propertyConfigurerOne" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
<import resource="classpath:/web${vabse.Environment}.xml"/>