在一个 Tomcat 上运行多个 Spring-boot 应用程序

Posted

技术标签:

【中文标题】在一个 Tomcat 上运行多个 Spring-boot 应用程序【英文标题】:Multiple Spring-boot applications running on one Tomcat 【发布时间】:2015-12-30 08:31:21 【问题描述】:

我可以在一个 Tomcat 上运行两个(或更多)Spring-boot 应用程序吗?

我有两个应用程序打包为war 文件,我想在一台Tomcat 服务器上运行它们。但是,当我部署它们时,出现以下异常:

org.springframework.jmx.export.UnableToRegisterMBeanException: 
    Unable to register MBean [org.springframework.boot.actuate.endpoint.jmx.DataEndpointMBean@2361d8ee] with key 'dumpEndpoint'; 
    nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.boot:type=Endpoint,name=dumpEndpoint

每个 Spring-boot 应用程序注册的默认端点(如 /health 等)发生冲突。是否有一些解决方法或无法实现此设置?

感谢您的任何回复!

【问题讨论】:

【参考方案1】:

正如Spring Boot Reference 所说:

如果您的应用程序包含多个 Spring ApplicationContext,您可能会发现名称冲突。要解决此问题,您可以将 endpoints.jmx.uniqueNames 属性设置为 true,以便 MBean 名称始终是唯一的。

endpoints.jmx.domain=myapp
endpoints.jmx.uniqueNames=true

【讨论】:

谢谢!我错过了这个。 我在同一个 tomcat 上部署了两个 Spring Boot 应用程序,并且两个应用程序具有相同的数据源。我得到 InstanceAlreadyExistsException: org.apache.tomcat.jdbc.pool.jmx:name=dataSourceMBean,type=ConnectionPool 。我已经设置了endpoints.jmx.domain=myapp endpoints.jmx.uniqueNames=true。但我仍然得到错误。任何建议 @Mukun 你能解决这个问题吗? 我在 tomcat 中运行多个 Spring Boot 应用程序。但都连接到不同的数据库/架构。【参考方案2】:

类似于@Maciej 的回答。另一种方法是设置以下内容

spring.application.name=my-app-name
spring.jmx.default-domain=my-app-name

或者application.yaml

spring:
  application:
    name: my-app-name
  jmx:
    default-domain: my-app-name

在 Spring Boot 上为我工作1.5.9.RELEASE

【讨论】:

【参考方案3】:
spring.jmx.default-domain=app-name
spring.jmx.unique-names=true

【讨论】:

以上是关于在一个 Tomcat 上运行多个 Spring-boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

java 一个tomcat上可以装几个网站?几个war?几个servlet?

在一台电脑上运行两个或两个以上的tomcat

同一台电脑上运行多个tomcat,环境变量以及文件内容更改的相关配置(perfect)

关于在同一端口上运行多个应用程序

Tomcat一台电脑上运行多个tomcat

1 台 Linux 服务器上,部署多个 Tomcat,并以 service 方式运行