尝试将WebSphere应用程序迁移到Tomcat并部署到Pivotal Cloud Foundry上以使同一个应用程序连接到两个具有完全相同的架构,具有不同数据的数据库时,遇到了一个需求,这些数据库具有相同的应用程序代码,并且部署在不同的路径上。能够基于被调用来访问应用程序的URL连接到数据库。

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

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

试图使用maven部署到无济于事并最终陷入循环的不同上下文路径,有没有人遇到过这样的情况,请多加考虑。

最佳答案

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


修改您的应用程序,使其能够感知并让您选择。也许有一个查询参数可供选择,或者/dev/blah转到一个DB,而/test/blah转到另一个DB。
将同一应用程序推送两次,但将不同的数据库和路由绑定到每个应用程序。
尝试在CF上的一个应用程序中的Tomcat中运行同一应用程序代码的两个实例。


其中,#1很好,但可能需要更改代码。 #2是我的选择,因为它很快就可以完成,#3将需要大量工作,因为您将与Java buildpack对抗,不建议这样做。



要完成第二项,您需要执行以下操作:


将您的应用程序代码推送为app-A。
绑定数据库服务。
使用上下文路径(如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 }}'


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

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

希望有帮助!

09-04 19:32
查看更多