在尝试将 WebSphere 应用程序迁移到 Tomcat 并部署到 Pivotal Cloud Foundry 时,我们的团队遇到了一个要求,即让相同的应用程序连接到两个不同的数据库,这两个数据库具有完全相同的模式和不同的数据,本质上是在中部署相同的应用程序代码不同的路径,并能够根据为访问应用程序而调用的 URL 连接到数据库。
目前,我们在 Websphere 中处理这种情况的方法是使用部署脚本将应用程序部署到两个服务器中,并在 JNDI 中提供不同的数据库详细信息,并使用服务器名称访问应用程序。
我们使用 Jenkins 将应用程序部署到 PCF。
尝试使用 maven 部署到不同的上下文路径,但没有帮助并最终陷入循环,有没有人遇到过这样的情况,任何想法将不胜感激。
最佳答案
我认为您可以通过多种方式处理此问题。
修改您的应用程序,让它知道并让您选择。也许有一个查询参数可供选择,或者
/dev/blah
转到一个数据库,而/test/blah
转到另一个数据库。推送同一个应用两次,但为每个应用绑定(bind)不同的数据库和路由。
尝试在 CF 上的一个应用中的 Tomcat 中运行同一应用代码的两个实例。
其中,#1 很好,但可能需要更改代码。 #2 是我的选择,因为它做起来非常快,#3 会做很多工作,因为你会与 Java buildpack 作斗争,这是不推荐的。
要完成 #2,您需要执行以下操作:
- 将您的应用代码作为 app-A 推送。
- 绑定(bind)数据库服务。
- 使用上下文路径映射路由,例如
my-cool-app.example.com/app-a
。 - 启动您的应用。
对 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 }}'
如果您使用 Spring Boot 和 JAR 部署,则需要设置 server.contextPath=/app-a
。
希望对您有所帮助!
关于java - 一个应用程序代码具有多个上下文路径/部署以连接到不同的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53636311/