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

use*_*928 6 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=HikariDataSource
Run Code Online (Sandbox Code Playgroud)

如果我只在tomcat上部署了一个应用程序,则不会出现此错误。有办法解决这个问题吗?

小智 10

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

spring.jmx.default-domain=app_name
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。


man*_*ish 0

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

程序化配置


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

HikariDataSource productDS = new HikariDataSource();
productDS.setPoolName("productDS");
// Set other data source properties.
Run Code Online (Sandbox Code Playgroud)

弹簧配置


<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>
Run Code Online (Sandbox Code Playgroud)

  • 如何在 Spring Boot 应用程序中执行此操作? (2认同)