应用场景
我在 IaaS 云服务上有一堆 Tomcat 服务器,所以它们都在我的控制之下。
这些服务器将(应用程序处于设计阶段)运行任何 Java 应用程序容器软件,例如 Tomcat、JBoss、Websphere。
除了最好的解决方案之外,我还有一个 Web 应用程序(WAR),我有完整的源代码。就像在任何体面的托管环境中一样,设置新用户意味着将同一 Web 应用程序的新副本部署到不同的应用程序上下文(例如,将 WAR 复制为newuser.war
并让 Tomcat 吃掉它)。
该应用程序完全基于 Spring 和 Hibernate。它由 Maven 提供支持。
由于我们在 IaaS 上运行,我们正在考虑向我们的管理软件添加要求。如果应用服务器出现故障,重新部署它在不同节点上运行的 webapps,和/或自动请求云提供商提供新机器(尤其是当注册用户增加时)。我们的提供商目前没有PaaS 服务。讨论支持 Java Webapps 的云提供商超出了范围。
配置需求
前面提到的 webapp 的每个实例都有自己的数据库(需要管理软件生成的特定连接字符串)。此外,我们需要在它们的字符串属性中自定义一些 bean。
问题
专注于自我管理和自动管理的 Tomcat 服务器,我们需要设计一个自动设置机制(集成到我们之前讨论过的故障转移中)。我们现在的问题是设置数据库连接字符串和一些 Spring bean 的字符串属性(这些是共享的一对一密码)。
首先,我带着我的想象力提出了一个可能的解决方案,但我不知道它是否在易用性和可管理性方面是“最好的”。
那么问题来了:
- 从高层次的角度来看,您是否看到以下描述的方法存在重大缺陷?
- 您是否知道更智能的解决方案(也许可以通过附加软件轻松实现)来实现我需要做的事情?
该方法
由于我们有完整的源代码,一个 Bash 脚本就足够了:
- 从 SVN 生产分支下载新副本
- 从字面上用所需的替换连接字符串
hibernate.cfg.xml
(也许 SVN 分支中的文件包含用于字符串替换的占位符) - 从字面上替换 Spring 配置文件中的占位符
- 以新名称复制到 Tomcat webapp 文件夹
- 等待 Tomcat 自动部署