我正在尝试在同一个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上只部署了一个应用程序,那么我不会遇到此错误。 有没有办法解决这个问题?
答案 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)
为您的数据源提供唯一的名称。例如,如果您有用于存储用户和产品数据的单独模式,则可以分别为数据源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.
<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>