java - 一个应用程序代码具有多个上下文路径/部署以连接到不同的数据库

标签 java tomcat jenkins websphere cloud-foundry

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

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

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

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

最佳答案

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

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

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

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

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


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

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

对 app-B 重复相同的操作,但使用不同的数据库和路由/路径(即 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 Boot 和 JAR 部署,则需要设置 server.contextPath=/app-a

希望对您有所帮助!

关于java - 一个应用程序代码具有多个上下文路径/部署以连接到不同的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53636311/

相关文章:

java - ClassNotFoundException:HibernateDaoSupport - Tomcat 7

Jenkins 返回状态码 128

linux - Jenkins 容器 - 无效的引用格式

git - Jenkins 从 git 标签创建构建

java - 未保存登录时的共享首选项

Java:从二进制数据(图像数据和调色板)创建图像

java - 使用OGNL自定义struts2 textfield标签的值

java - createSocket() 长时间后返回

apache - 是否有类似于 SQL Server 2008 R2 Express 静默安装的 Apache Tomcat 7.0.34 批量静默安装指南?

Apache 和 Tomcat 运行在同一台服务器上