Tomcat:使用数据库连接部署两个应用程序时出现HikariCP问题

问题描述 投票:4回答:3

我试图在同一个tomcat7实例上部署两个WAR文件(app1.war end 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上只部署了一个应用程序,则没有此错误。有没有办法解决这个问题?

java tomcat7 hikaricp
3个回答
7
投票

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

spring.jmx.default-domain=app_name

我希望这有帮助。


1
投票

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

spring.datasource.hikari.poolName=MyDataPoolName

或者application.yml:

spring:
  datasource:
    hikari:
      pool-name: MyDataPoolName

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


0
投票

为您的数据源提供唯一的名称。例如,如果您有用于存储用户和产品数据的单独模式,则可以分别命名数据源userDSproductDS

程序化配置


HikariDataSource userDS = new HikariDataSource();
userDS.setPoolName("userDS");
// Set other data source properties.

HikariDataSource productDS = new HikariDataSource();
productDS.setPoolName("productDS");
// Set other data source properties.

弹簧配置


<bean id="userDS" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
  <property name="poolName" value="userDS"/>
  ...
</bean>

<bean id="productDS" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
  <property name="poolName" value="productDS"/>
  ...
</bean>
© www.soinside.com 2019 - 2024. All rights reserved.