Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC具有多种配置_Java_Spring_Testing_Spring Mvc - Fatal编程技术网

Java Spring MVC具有多种配置

Java Spring MVC具有多种配置,java,spring,testing,spring-mvc,Java,Spring,Testing,Spring Mvc,对于我的SpringMVC应用程序,我创建了几种类型的配置(单元测试、集成、qa、生产)。所有配置都在一个war文件中,因此我只创建一种类型的应用程序。采用哪种配置应由运行应用程序的服务器决定 为了决定应该使用哪种配置,我必须查看一个文件。之后,我可以决定SpringMVC应该使用哪种配置 目前,按照惯例,始终使用-servlet.xml。有没有一种方法可以动态决定采用哪种配置 问候,, Michael这是我使用的解决方案。它工作得很好: 将配置差异放在属性文件中 保留一个带有占位符的Spri

对于我的SpringMVC应用程序,我创建了几种类型的配置(单元测试、集成、qa、生产)。所有配置都在一个war文件中,因此我只创建一种类型的应用程序。采用哪种配置应由运行应用程序的服务器决定

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

目前,按照惯例,始终使用-servlet.xml。有没有一种方法可以动态决定采用哪种配置

问候,,
Michael

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

  • 将配置差异放在属性文件中
  • 保留一个带有占位符的SpringXML
  • 使用PropertyPlaceHolderConfigure设置属性
  • PropertyPlaceHolderConfigure可以使用系统属性解析要加载的属性文件的名称
  • 在初始化PropertyPlaceHolderConfigure之前,使用环境的名称设置一个系统属性(可以在从文件中读取值的bean中执行此操作)
就这样!将干净地检测环境,并加载相关属性


无需等待Spring3.1,您现在就可以在3.0中使用此解决方案。

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

  • 将配置差异放在属性文件中
  • 保留一个带有占位符的SpringXML
  • 使用PropertyPlaceHolderConfigure设置属性
  • PropertyPlaceHolderConfigure可以使用系统属性解析要加载的属性文件的名称
  • 在初始化PropertyPlaceHolderConfigure之前,使用环境的名称设置一个系统属性(可以在从文件中读取值的bean中执行此操作)
就这样!将干净地检测环境,并加载相关属性


无需等待Spring3.1,您现在可以在3.0中使用此解决方案。

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

<?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>
然后在我的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 -->

将dev datasource.properties复制到war

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

<?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>
然后在我的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 -->

我会将dev datasource.properties复制到war中,毕竟我使用的是PropertyPlaceHolderConfigure,但与Axel提到的略有不同:我只从配置中加载一个属性,并使用它来确定要使用哪个导入。因为我不能使用文件来存储实例类型,但必须使用环境变量

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

毕竟,我使用的是PropertyPlaceHolderConfigure,但与Axel提到的略有不同:我只从配置中加载一个属性,并使用它来确定要使用哪个导入。因为我不能使用文件来存储实例类型,但必须使用环境变量

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



下一版本的spring有一个关于多个配置的计划功能。这背后更一般的问题实际上是:如何在一个spring应用程序中处理多个环境的配置?下一版本的spring有一个关于多个配置的计划功能。后面更一般的问题是这实际上是:如何在Spring应用程序中处理多个环境的配置?嗨,Axel,谢谢你的快速回复。据我所知,使用PropertyPlaceHolderConfigure可以只配置属性。但我还想配置bean(在内存数据库中而不是在真实数据库中),它仍然可以工作。使用属性作为您所依赖的bean的名称。如果有许多引用,可以使用别名及其指向的bean名称的属性。如果将bean标记为lazy init=true,则只有在当前环境中使用的bean才会被初始化。请参阅此处,以了解根据env加载proerty文件的优雅方法:@Pablojim是的,这正是我的看法。嗨,Axel,谢谢你的快速回复。据我所知,使用PropertyPlaceHolderConfigure可以只配置属性。但我还想配置bean(在内存数据库中而不是在真实数据库中),它仍然可以工作。使用属性作为您所依赖的bean的名称。如果有许多引用,可以使用别名及其指向的bean名称的属性。如果将bean标记为lazy init=true,则只有在当前环境中使用的bean才会被初始化。请参阅此处,以了解根据env加载proerty文件的优雅方法:@Pablojim是的,这正是我的看法。这是我的第一个计划。但我要将我的应用程序存储到vm映像中,并将该映像部署到我的服务器上。因此,我需要我的应用程序工作,因为每种类型的实例为每种环境构建不同的工件都有点麻烦-请参阅我的答案,以允许每个环境动态加载属性:我支持Pablojim。工件/环境是一种(不幸的是广泛存在的)反模式。它破坏了测试的可信度,因为您基本上在生产中部署了与您测试的产品不同的工件。这是我的第一个计划。但我要将我的应用程序存储到vm映像中,并将该映像部署到我的服务器上。因此,我需要我的应用程序工作,因为每种类型的实例为每种环境构建不同的工件都有点麻烦-请参阅我的答案,以允许每个环境动态加载属性:我支持Pablojim。工件/环境是一种(不幸的是广泛存在的)反模式。它破坏了测试的可信度,因为您基本上部署了一个diff