一个应用代码多个contextpaths/deployments连接不同的数据库

One application code with multiple contextpaths/deployments to connect to different databases

在尝试将 WebSphere 应用程序迁移到 Tomcat 并部署到 Pivotal Cloud Foundry 时,我们的团队遇到了一个要求,即让相同的应用程序连接到两个不同的数据库,这两个数据库具有完全相同的模式,但数据不同,本质上将相同的应用程序代码部署在不同的路径中,并能够根据为访问应用程序而调用的 URL 连接到数据库。

目前,我们在 Websphere 中处理这种情况,方法是使用部署脚本将应用程序部署到两个服务器中,并在 JNDI 中提供不同的数据库详细信息,并使用服务器名称访问应用程序。

我们使用 Jenkins 将应用程序部署到 PCF。

尝试使用 maven 部署到不同的上下文路径,但没有帮助并最终陷入循环,有没有人遇到过这样的情况,任何想法将不胜感激。

我认为您可以通过多种方式处理此问题。

  1. 修改您的应用程序,让它知道并让您选择。也许有一个查询参数 select 或 /dev/blah 转到一个数据库,而 /test/blah 转到另一个数据库。

  2. 同一个应用推送两次,但每个应用绑定不同的数据库和路由。

  3. 尝试在 CF 上的一个应用程序中 Tomcat 内 运行 同一应用程序代码的两个实例。

其中,#1 没问题,但可能需要更改代码。 #2 是我的选择,因为它做起来非常快,#3 会做很多工作,因为你会与 Java buildpack 作斗争,这是不推荐的。


要完成 #2,您需要执行以下操作:

  1. 将您的应用代码推送为 app-A。
  2. 绑定数据库服务。
  3. 使用上下文路径映射路由,例如 my-cool-app.example.com/app-a
  4. 启动您的应用程序。

对 app-B 重复相同的操作,但使用不同的数据库和 route/path(即 my-cool-app.example.com/app-b)`。

如果您正在部署 WAR 文件,您将需要告诉 Java buildpack 将您的应用程序部署到上下文路径上(它应该与您设置的路由上下文路径相匹配)。

cf set-env my-application JBP_CONFIG_TOMCAT '{tomcat: { context_path: /app-a }}'

https://github.com/cloudfoundry/java-buildpack/blob/master/docs/container-tomcat.md#common-configurations

如果您使用 Spring 引导和 JAR 部署,则需要设置 server.contextPath=/app-a

希望对您有所帮助!