【问题标题】:nested exception is javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=HikariDataSource嵌套异常是 javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=HikariDataSource
【发布时间】:2018-11-06 19:40:36
【问题描述】:

我已经在 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中实现并行部署而不会遇到这个问题?

【问题讨论】:

    标签: spring-boot tomcat hikaricp


    【解决方案1】:

    根据@brettwooldridge response 的说法,您不能有 2 个同名的池

    每个 webapp 必须在 HikariCP 中配置一个唯一的 poolName 属性,否则它们的 MBean 注册名称会发生​​冲突。

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

    不要声明池名称(如果可能)或随机化/添加序列到池名称

    【讨论】:

    • 我们没有声明池名称。它可能正在使用默认池名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2020-11-25
    • 2019-06-17
    相关资源
    最近更新 更多