嵌套的异常是javax.management.InstanceAlreadyExistsException:com.zaxxer.hikari:name = dataSource,type = HikariDataSource

时间:2018-11-06 19:40:37

标签: spring-boot tomcat hikaricp

我已经在tomcat-8.5中部署了我的spring boot应用程序。只要部署了一个战争实例,它就可以正常工作,但是一旦我尝试部署同一战争文件的下一个版本(我试图在tomcat中进行并行部署),它就会抛出

Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [HikariDataSource (HikariPool-7)] with key 'dataSource'; nested exception is javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=HikariDataSource

我知道,由于一个实例已经与现有的hikari池一起运行,因此部署另一个实例将尝试创建一个具有相同名称的其他池,并由于该池已经存在而引发错误。

每次部署新版本的应用程序时,我都可以更改池名称,但是我认为这不是一个好的解决方案。

有没有更好的方法可以在tomcat中实现并行部署而不会遇到此问题?

1 个答案:

答案 0 :(得分:0)

根据@brettwooldridge response

,您不能有两个具有相同名称的池。
  

每个Web应用程序必须在HikariCP中配置一个唯一的poolName属性,否则它们的MBean注册名称会冲突。

     

似乎正在以某种方式创建两个池。与第一个同名的第二个将无法注册。如果不声明poolName,则HikariCP将自动生成它们,这将起作用,但可能只是掩盖了为什么要创建两个池的根本问题。这可能是Spring Boot或JHipster配置问题……很可能是Spring Boot。

要么不声明一个池名(如果可能的话),要么不随机化/添加序列到该池名