java - 在 servlet-context 中的 dev 和 prod 值之间切换的标志

标签 java spring maven spring-mvc

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

这是我们的 servlet 上下文中 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.war project-1.0.0-production.war?

最佳答案

让我详细说明 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(或您需要的任何其他配置文件)来激活。

干杯,

关于java - 在 servlet-context 中的 dev 和 prod 值之间切换的标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19905423/

相关文章:

java - sbt 相当于 maven exec 插件

java - 在 Java 中验证和读取日期明智文件夹中的文件的最佳方法

Java 程序导致 Matlab 崩溃

java - 如何只为一个特殊路径添加过滤器 WebSecurityConfigurerAdapter

java - 我们可以使用 MongoRespository 进行 findByNameAndPassword() 这种类型的查询吗?

java - 不使用Spring ACL,实现基于实体 "creator"的方法级安全检查

java - 从 STS 3.2.0 中的 Java 项目中删除生成器

python - 我如何从 Maven 运行 python 代码,其中 python 可能在也可能不在路径中

Java:存储 HashMap 的理想文件格式?

java - Maven 属性的约定 : "dot case" or "camel case"?