Spring Web 应用程序中配置文件的处理

2024-01-05

我曾多次遇到同样的问题,我想了解其他人对这个问题的看法: 假设我们将 Spring 应用程序打包为.war文件,我们想运行它几种环境。 (开发/测试/预生产/生产/等)

为了访问应用程序所需的基础设施(数据库/网络服务等),我们将访问信息存储在配置文件中,一些业务配置也位于这些文件中。 假设我们使用。特性用于此目的的文件(因为我们在 war 中有一个 spring 应用程序,并且我们喜欢由 appcontext 中的单行读取属性) 并且还假设在不同的环境中我们没有相同的应用程序服务器/servlet 容器。 (例如:开发、测试:jetty、预生产:tomcat、生产:glassfish)

我通常做的是创建多个Maven 配置文件,每个环境一个,每个环境的相应文件中所需的配置。

最近,我遇到了一位运营人员提出的问题: “那么,如果数据库在预生产环境中发生更改,我们真的必须在构建服务器上生成具有适当配置文件的新构建吗?” 我回答“不,您实际上可以转到 .../webapps/currentApp/WEB-INF/classes/config/application.properties 并更改那里的值,然后重新启动容器”

我们提出了一个解决方案,可以解决此问题的某些方面: 使用 Maven 组装插件,我们嵌入了 Jettyinside战争使其可用作“可执行”战争,也使我们有可能拥有全局配置 XML, 嵌入式 Jetty 的启动程序在展开的 war 目录中创建/修改适当的 .properties 文件,然后才启动应用程序。

但同样,如果您想使用 Jetty 以外的其他任何东西,这并不能解决问题。

大家遇到同样的情况都是怎么处理的呢?


环境变量、外部配置文件

我们有类似的东西,一个使用 Spring 在 Tomcat/Weblogic 中运行的 Web 应用程序。 我们所做的就是定义一个环境属性 https://en.wikipedia.org/wiki/Environment_variableCONFIG_PATH 并将所有 XML(包括 spring 配置)和属性文件放入该目录中。

我们有多个属性文件(每个环境),我们将其作为 tar 文件发送。 Web 应用程序从 CONFIG_PATH 目录加载所有 Properties/Spring 配置文件。该变量被定义为各自环境中的环境变量

这样我们就不会触及 WAR 文件,也不会为环境构建单独的 WAR。想想这个场景:构建了 QA 和 PROD WAR 文件,QA 测试了 QA war 文件,PROD WAR 部署在 PROD 中,但有些东西爆炸了:(

我们做如下事情:

在 spring 配置 xml 中,我们定义:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="order" value="0"></property>
    <property name="locations">
        <list>
            <value>file:${CONFIG_PATH}/App.properties</value>
        </list>
    </property>
</bean>

像往常一样在 spring 配置中引用所有变量。

在 web.xml 中我们定义 spring 配置如下:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>file:${CONFIG_PATH}/**/spring-config.xml
    </param-value>
</context-param>

QA/PROD 团队使用相应的环境文件部署相同的工件。如果有什么东西爆炸了,我们知道这只是环境问题。属性被搞乱了。 华泰

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Web 应用程序中配置文件的处理 的相关文章

随机推荐

  • 创建触发器以插入到另一个表中

    我在执行下面的触发器时遇到一些问题 CREATE OR REPLACE TRIGGER AFTERINSERTCREATEBILL AFTER INSERT ON READING FOR EACH ROW DECLARE varReadNo
  • 使用 JWT 和 OpenID Connect 在微服务中进行客户端身份验证

    我对微服务架构中的身份验证有一些疑问 我现在有一个整体应用程序 我的目标是将应用程序拆分为小型微服务 我最大的问题是身份验证 目前 阅读大量文档后 似乎最好的解决方案是使用 OpenID Connect 对用户进行身份验证以检索 JWT 该
  • 通过 JSch 的 SFTP 抛出错误 4:失败

    我在尝试通过 SFTP 将文件从 Windows 传输到 Unix 服务器时遇到了一个特殊问题 错误 堆栈跟踪 是 4 Failure at com jcraft jsch ChannelSftp throwStatusError Chan
  • 为什么每个请求都会执行passport.serializeUser?

    我使用 Passport js Passport facebook token 通过 Strongloop 的环回框架来保护我的 API 构建 为什么护照反序列化成功后还要再次序列化反序列化的用户 每个请求都会调用 Passport aut
  • mongodb数据目录权限

    早些时候 我将所有 mongodb 数据文件存储在 var lib mongodb 目录中 etc mongodb conf 中的 dbpath 条目是 var lib mongodb 现在我想将数据目录更改为 vol db 所以我创建了目
  • 非泛型类是否可以包含 .NET(C# 或 VB.NET)中的泛型列表?

    我希望有人可以帮助我理解这样的事情是否可能 如何可能 在这种情况下 假设您正在尝试对电子表格或数据库中的网格进行建模 但每列中的数据只能是一种数据类型 示例 第 1 列只能包含整数 我创建了一个通用类来模拟列结构 如下所示 public c
  • 为什么“C”中的索引从零开始?

    为什么 C 中数组的索引从 0 开始 而不是从 1 开始 在C中 数组的名称本质上是一个指针 但请看评论 对内存位置的引用 等等表达式array n 指的是一个内存位置n远离起始元素的元素 这意味着索引被用作偏移量 数组的第一个元素恰好包含
  • 在不使用会话上下文的情况下在 Web 应用程序中保留值

    我有一个 变量 用户可以在 JSP Struts 应用程序中修改该变量 该变量必须在整个 Web 应用程序的会话中保留 他们可能会离开设置和查看该变量的页面 仍然留在应用程序中 并且当他们回来时 他们上次为该变量设置的值应该仍然存在 显而易
  • iOS7-UItableViewCell 以 Grouped 样式显示在表格视图中

    在 iOS7 中 分组表视图的单元格显示为表视图的全宽 更像是普通表视图样式 但在模拟器的设置应用程序中 分组样式看起来不同 对于实现这种类型的单元有什么帮助吗 该解决方案适用于 iOS7 以及以前版本的 iOS 创建自定义 UITable
  • 是否有正则表达式可以返回相同字符的重复匹配?

    使用 NET 正则表达式 假设我有以下文本 哒哒哒哒哒哒 我想测试任何字符的重复次数是否超过 2 次 正则表达式不应返回包含双字母 例如单词 的文本的匹配项 look UPDATE 不要假设输入文本仅包含字母 d 的重复 我想要任何重复的字
  • 使用 dplyr 和 lazyeval 进行编程

    我在以保留非标准评估的方式重构 dplyr 时遇到问题 假设我想创建一个始终选择和重命名的函数 library lazyeval library dplyr df lt data frame a c 1 2 3 f c 4 5 6 lm c
  • if 语句过多

    我有一些话题要讨论 我有一段代码 24ifs elifs Operation是我自己的类 代表的功能类似于Enum https docs python org 3 library enum html 这是代码片段 if operation
  • Android:调用 onStop() 时“java.lang.IllegalArgumentException:服务未注册”

    我有一个需要长时间运行的应用程序Service 我需要确保当用户离开时Activity the Service stops 因此我实施了onStop 关闭服务 这是代码 Override protected void onStop supe
  • ButterKnife 中 R2.java 中的最后一个字段

    这是一个扩展Android 为什么我们需要使用 R2 而不是 R 和 butterknife https stackoverflow com questions 42362062 android why do we need to use
  • C++ 二进制转十进制

    所以我知道有一种方法可以使用 bitset 库将 Dec 转换为二进制 但是您可以使用 bitset 库将二进制转换为十进制吗 或者你必须手动完成 bitset lt 8 gt bin x number 可以 但它应该是一个字符串 std
  • 在线程中创建的 DatabaseWrapper 对象只能在同一线程中使用。”当尝试使用 celery 插入数据库时

    我正在使用 celery 从 csv 读取数据并将其上传到 Postgres celery 任务正在工作 我认为 但是 django 抛出错误 我正在获取一个文件 将其转换为 pandas 删除 2 列 然后转换为 numpy 并传递给 c
  • 无法将图像上传到 Django 项目,获取 Form 对象没有属性“保存”

    我正在尝试通过模板输入的文件上传图像文件 我已遵循所有说明 但在附加文件并单击提交时出现此错误 AttributeError PicUpForm object has no attribute save 因此我的图像没有上传到指定的目录 并
  • iPad/iPhone双击问题

    我有一个非常相似的问题iPad iPhone 悬停问题导致用户双击链接 https stackoverflow com questions 3038898 ipad iphone hover problem causes the user
  • solr tomcat UTF-8

    我在 tomcat 中有一个 solr 设置 并且使用 jdbc 从数据库导入数据 但是当我在导入数据后使用非 unicode 字符时 发送查询时它无法识别结果中的查询 对于带有 solr 的 Tomcat 的 UTF 8 支持 您可能需要
  • Spring Web 应用程序中配置文件的处理

    我曾多次遇到同样的问题 我想了解其他人对这个问题的看法 假设我们将 Spring 应用程序打包为 war文件 我们想运行它几种环境 开发 测试 预生产 生产 等 为了访问应用程序所需的基础设施 数据库 网络服务等 我们将访问信息存储在配置文