对于我的spring-mvc应用程序,我创建了几种类型的配置(unittest,integration,qa,production)。所有配置都在一个war文件中,因此我只创建了一种类型的应用程序。应采取哪种配置应由运行应用程序的服务器决定。
要决定应该使用哪种配置,我必须查看一个文件。之后我可以决定spring mvc应该使用哪种配置。
现在按惯例,总是使用-servlet.xml。有没有办法动态决定采用哪个配置?
此致 迈克尔
答案 0 :(得分:4)
这是我使用的解决方案。它运作得很好:
你去吧!将干净地检测环境,并加载相关属性!
无需等待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"/>