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

时间:2015-12-15 09:07:28

标签: 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

如果我在tomcat上只部署了一个应用程序,那么我不会遇到此错误。 有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

In [360]: a
Out[360]: 
array([[1, 2, 3, 2, 1],
       [4, 5, 5, 5, 1],
       [6, 7, 8, 9, 0]])

In [361]: b
Out[361]: array([3, 2, 4])

In [362]: a[b[:,None] > np.arange(a.shape[1])]
Out[362]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])
分别

或application.yml:

spring.datasource.hikari.poolName=MyDataPoolName

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

答案 1 :(得分: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.

Spring配置

<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>