tomcat - 在自动部署之前自定义 Web 应用程序

标签 tomcat cloud war web-deployment

应用场景

我在 IaaS 云服务上有一堆 Tomcat 服务器,所以它们都在我的控制之下。

这些服务器将(应用程序处于设计阶段)运行任何 Java 应用程序容器软件,例如 Tomcat、JBoss、Websphere。

除了最好的解决方案之外,我还有一个 Web 应用程序(一个 WAR),我有它的完整源代码。与任何体面的托管环境一样,设置新用户意味着将同一 Web 应用程序的全新副本部署到不同的应用程序上下文(例如,将 WAR 复制为 newuser.war 并让 Tomcat 吃掉它)。

该应用程序完全基于 Spring 和 Hibernate。它由 Maven 提供支持。

由于我们在 IaaS 上运行,我们正在考虑向我们的管理软件添加要求。如果应用程序服务器出现故障,重新部署它在不同节点上运行的 Web 应用程序,和/或自动请求云提供商提供新机器(尤其是当注册用户增加时)。我们的供应商目前没有 PaaS 服务。讨论支持 Java Webapps 的云提供商超出范围

配置需求

前面提到的webapp的每个实例都有自己的数据库(需要管理软件生成特定的连接字符串)。此外,我们需要一些 bean 在它们的字符串属性中进行自定义。

问题

关注 self 管理和自动管理的 Tomcat 服务器,我们需要设计一个自动设置机制(集成到我们之前讨论的故障转移中)。我们现在的问题是设置数据库连接字符串一些 Spring bean 的字符串属性(这些是共享的一对一密码)。

首先,我凭着自己的想象力找到了一个可能的解决方案,但我不知道它在易用性和可管理性方面是否是“最佳”。

那么问题是:

  • 从高层次的角度来看,您是否发现下述方法存在重大缺陷?
  • 您是否知道更智能的解决方案(可能借助附加软件的简便性)来实现我需要做的事情?

方法

因为我们有完整的源代码,一个 Bash 脚本可能就足够了:

  1. 从 SVN 生产分支下载新的副本
  2. 直接将 hibernate.cfg.xml 中的连接字符串替换为所需的字符串(可能 SVN 分支中的文件包含用于字符串替换的占位符)
  3. 逐字替换 Spring 配置文件中的占位符
  4. 以新名称复制到 Tomcat webapp 文件夹
  5. 等待 Tomcat 自动部署

最佳答案

Spring 支持占位符。

最简单的方法是在类路径中放置一个属性文件(如果每个服务器只运行一个 war,在 Tomcat lib 目录中,或者如果在 war/WEB-INF/class 文件夹中有多个 war)。

大部分时间占位符用于定义数据库连接(可能解决您的休眠配置需求)。

由于有几种不同的方法来检索配置,您应该使用大 G 来搜索适合您的情况的方法。

关于tomcat - 在自动部署之前自定义 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14753002/

相关文章:

android - 将我的 "app"验证到 Google Cloud Endpoints 而不是 "user"

go - 错误: cannot load values. yaml:将YAML转换为JSON时发生错误:yaml:第**行:找不到预期的 key

spring - 如何在打包为 war 的 spring boot 应用程序中加载其他属性文件?

java - ReportServer Eclipse 编辑和部署

Java: Wicket 口无法找到组件

java - Spring framework : HTTP OPTIONS returning all METHODS (get, put, post, delete, trace, head, options)

java - 如何处理org.apache.tomcat.util.threads.TaskQueue.take()热点?

apache - 如何在我的电脑中分别安装 tomcat 服务器和 xampp 服务器?

java - 为什么我得到 "No name matching found"CertificateException?

amazon-web-services - AWS EC2获取AMI大小