Java Tomcat:部署具有DB连接的两个应用程序时出现HikariCP问题

Java Tomcat:部署具有DB连接的两个应用程序时出现HikariCP问题,java,tomcat7,hikaricp,Java,Tomcat7,Hikaricp,我试图在同一个tomcat7实例上部署两个WAR文件(app1.WAR和app2.WAR)。我得到这个错误: Unable to register MBean [HikariDataSource (HikariPool-0)] with key 'dataSource'; nested exception is javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=H

我试图在同一个tomcat7实例上部署两个WAR文件(app1.WAR和app2.WAR)。我得到这个错误:

Unable to register MBean [HikariDataSource (HikariPool-0)] with key
  'dataSource'; nested exception is javax.management.InstanceAlreadyExistsException:
  com.zaxxer.hikari:name=dataSource,type=HikariDataSource
如果在tomcat上只部署了一个应用程序,则不会出现此错误。
有没有办法解决这个问题?

为数据源指定唯一的名称。例如,如果您有单独的模式来存储用户和产品数据,则可以分别将数据源命名为
userDS
productDS

程序配置
弹簧配置

...
...

在Spring Boot中,您可以通过application.properties更改Hikari数据源池的名称:

spring.datasource.hikari.poolName=MyDataPoolName
或application.yml分别:

spring:
  datasource:
    hikari:
      pool-name: MyDataPoolName

然后Tomcat可以加载这两个应用程序,并且名称冲突消失。

在spring boot中,jmx bean在运行时加载,并扫描您的应用程序。如果找到两个数据源,它将抛出javax.management.InstanceAlreadyExistsException。这可以通过在application.properties文件中定义默认jmx默认域名来解决,如下所示

spring.jmx.default-domain=app_name

我希望这会有所帮助。

如何在spring boot应用程序中做到这一点?使用编程(Java)配置。@Manu请参阅我对这个问题的回答。关于这个问题,正在进行讨论:希望,spring开发人员解决这个问题。
spring:
  datasource:
    hikari:
      pool-name: MyDataPoolName
spring.jmx.default-domain=app_name