Tomcat:使用数据库连接部署两个应用程序时出现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上只部署了一个应用程序,则没有此错误。 有没有办法解决这个问题?

为您的数据源提供唯一的名称。 例如,如果您有用于存储用户和产品数据的单独模式,则可以分别为数据源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 Boot中,您可以通过application.properties更改Hikari数据源池的名称:

 spring.datasource.hikari.poolName=MyDataPoolName 

或者application.yml分别为:

 spring: datasource: hikari: pool-name: MyDataPoolName 

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

在spring boot中,jmx bean在运行时加载,它会扫描你的应用程序。 如果找到两个数据源,它将抛出javax.management.InstanceAlreadyExistsException。 这可以通过在application.properties文件中定义默认的jmx默认域名来解决,如下所示

 spring.jmx.default-domain=app_name 

我希望这有帮助。