标记以在servlet-context中的dev和prod值之间切换

时间:2013-11-11 11:39:02

标签: java spring maven spring-mvc

我们的Spring 3.1.3 MVC项目(使用Maven构建)有一个servlet-context.xml,其中包含bean和bean参数,每次我们进行部署时都需要使用生产值进行更新。有时负责制作生产版本的开发人员无法更新这些值,并且有一种方法可以为生产制作自动构建(目前我们只有CI的自动构建,这些值取决于开发人员最后推送到中央代码库,因此我们无法通过单元测试获得100%的代码覆盖率。

这是我们的servlet-context中dev与prod值的一个例子:

<beans:bean id="projectApp" class="com.project.app">
    <beans:property name="config" ref="config"/>
</beans:bean>

<beans:bean id="config" class="com.project.Config">
    <!-- Dev -->
    <beans:property name="firstServiceUrl" value="http://localhost:8010/"/>
    <beans:property name="secondServiceUrl" value="http://localhost:8020/"/>
    <beans:property name="database" value="localhost"/>
    <!-- QA -->
    <!-- <beans:property name="firstServiceUrl" value="https://qa.services.url/first/"/> -->
    <!-- <beans:property name="secondServiceUrl" value="https://qa.services.url/second/"/> -->
    <!-- <beans:property name="database" value="192.168.5.5"/> -->
    <!-- Production -->
    <!-- <beans:property name="firstServiceUrl" value="https://prod.services.url/first/"/> -->
    <!-- <beans:property name="secondServiceUrl" value="https://prod.services.url/second/"/> -->
    <!-- <beans:property name="database" value="192.168.5.5"/> -->
</beans:bean>

有没有办法轻松快速地在值之间切换?我们可以有一个告诉Spring或Maven的标志我们正在进行生产构建以使其使用生产值吗?有没有办法使用Maven导出目标.war文件名中的构建类型,以获得project-1.0.0-dev.warproject-1.0.0-production.war之类的内容?

1 个答案:

答案 0 :(得分:1)

让我详细说明JB Nizet和Dave G的评论。您应该阅读Spring配置文件,它们在您的应用程序上下文中使用如下:

<beans profile="dev">
    <beans:property name="firstServiceUrl" value="localhost...." />
    ...
</beans>

<beans profile="prod">
    <beans:property name="firstServiceUrl" value="10.14.17.222...." />
    ...
</beans>

并通过设置系统属性spring.profiles.active=dev(或您需要的任何其他配置文件)激活。

干杯,