Failed to register MBean [HikariDataSource (HikariPool-0)] with the key 'dataSource'

I get below error in prod mode for (Java8 + Oauth2 + MySql + Hazelcast + without clustered http sessions). Dev mode worked fine.

Unable to register MBean [HikariDataSource (HikariPool-0)] with key 'dataSou rce'; nested exception is javax.management.InstanceAlreadyExistsException: com.z axxer.hikari:name=dataSource,type=HikariDataSource 

In the log, the first part of creating a data source (hazelcast) talks about the [dev] mode. Not sure if this is intentional.

Please help me in solving the problem.

Journal

 Dec 12, 2014 2:44:11 PM org.apache.catalina.startup.HostConfig deployWAR INFO: Deploying web application archive D:\tools\apache-tomcat-7.0.55\webapps\re tailenergy.war [INFO] com.fg.re.ApplicationWebXml - Running with Spring profile(s) : prod 2014-12-12 14:44:19.125 WARN 1368 --- [ost-startStop-1] osblLoggingApplicat ionListener : Logging environment value '-Djava.util.logging.config.file=" D:\tools\apache-tomcat-7.0.55\conf\logging.properties"' cannot be opened and wil l be ignored (using default location instead) log4j:WARN No appenders could be found for logger (org.jboss.logging). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more in fo. [DEBUG] com.fg.re.config.AsyncConfiguration - Creating Async Task Executor [DEBUG] com.fg.re.config.MetricsConfiguration - Registering JVM gauges [INFO] com.fg.re.config.MetricsConfiguration - Initializing Metrics JMX reportin g [INFO] com.hazelcast.instance.DefaultAddressPicker - null [dev] [3.2.5] Prefer I Pv4 stack is true. [INFO] com.hazelcast.instance.DefaultAddressPicker - null [dev] [3.2.5] Picked A ddress[192.168.1.9]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localp ort=5701], bind any local is true [INFO] com.hazelcast.system - [192.168.1.9]:5701 [dev] [3.2.5] Hazelcast 3.2.5 ( 20140814) starting at Address[192.168.1.9]:5701 [INFO] com.hazelcast.system - [192.168.1.9]:5701 [dev] [3.2.5] Copyright (C) 200 8-2014 Hazelcast.com [INFO] com.hazelcast.instance.Node - [192.168.1.9]:5701 [dev] [3.2.5] Creating M ulticastJoiner [INFO] com.hazelcast.core.LifecycleService - [192.168.1.9]:5701 [dev] [3.2.5] Ad dress[192.168.1.9]:5701 is STARTING [INFO] com.hazelcast.cluster.MulticastJoiner - [192.168.1.9]:5701 [dev] [3.2.5] Members [1] { Member [192.168.1.9]:5701 this } [INFO] com.hazelcast.core.LifecycleService - [192.168.1.9]:5701 [dev] [3.2.5] Ad dress[192.168.1.9]:5701 is STARTED [DEBUG] com.fg.re.config.CacheConfiguration - Starting HazelcastCacheManager [INFO] com.hazelcast.util.HealthMonitor - [192.168.1.9]:5701 [dev] [3.2.5] memor y.used=242.6M, memory.free=219.4M, memory.total=462.0M, memory.max=891.0M, memor y.used/total=52.51%, memory.used/max=27.23%, load.process=-100.00%, load.system= 100.00%, load.systemAverage=-100.00%, thread.count=38, thread.peakCount=38, even tqsize=0, executor.q.async.size=0, executor.q.client.size=0, executor.q.operat ion.size=0, executor.q.query.size=0, executor.q.scheduled.size=0, executor.q.io. size=0, executor.q.system.size=0, executor.q.operation.size=0, executor.q.priori tyOperation.size=0, executor.q.response.size=0, operations.remote.size=0, operat ions.running.size=0, proxy.count=0, clientEndpoint.count=0, connection.active.co unt=0, connection.count=0 [DEBUG] com.fg.re.config.DatabaseConfiguration - Configuring Datasource [DEBUG] com.zaxxer.hikari.HikariConfig - HikariCP pool HikariPool-0 configuratio n: [DEBUG] com.zaxxer.hikari.HikariConfig - autoCommit......................true [DEBUG] com.zaxxer.hikari.HikariConfig - catalog......................... [DEBUG] com.zaxxer.hikari.HikariConfig - connectionCustomizer............com.zax xer.hikari.HikariConfig$1@5a3cdbda [DEBUG] com.zaxxer.hikari.HikariConfig - connectionCustomizerClassName... [DEBUG] com.zaxxer.hikari.HikariConfig - connectionInitSql............... [DEBUG] com.zaxxer.hikari.HikariConfig - connectionTestQuery............. [DEBUG] com.zaxxer.hikari.HikariConfig - connectionTimeout...............30000 [DEBUG] com.zaxxer.hikari.HikariConfig - dataSource...................... [DEBUG] com.zaxxer.hikari.HikariConfig - dataSourceClassName.............com.mys ql.jdbc.jdbc2.optional.MysqlDataSource [DEBUG] com.zaxxer.hikari.HikariConfig - dataSourceJNDI.................. [DEBUG] com.zaxxer.hikari.HikariConfig - dataSourceProperties............{user=r oot, url=jdbc:mysql://localhost:3306/retailenergy, password=<masked>, prepStmtCa cheSqlLimit=2048, cachePrepStmts=true, useServerPrepStmts=true, prepStmtCacheSiz e=250} [DEBUG] com.zaxxer.hikari.HikariConfig - driverClassName................. [DEBUG] com.zaxxer.hikari.HikariConfig - idleTimeout.....................600000 [DEBUG] com.zaxxer.hikari.HikariConfig - initializationFailFast..........true [DEBUG] com.zaxxer.hikari.HikariConfig - isolateInternalQueries..........false [DEBUG] com.zaxxer.hikari.HikariConfig - jdbc4ConnectionTest.............false [DEBUG] com.zaxxer.hikari.HikariConfig - jdbcUrl......................... [DEBUG] com.zaxxer.hikari.HikariConfig - leakDetectionThreshold..........0 [DEBUG] com.zaxxer.hikari.HikariConfig - maxLifetime.....................1800000 [DEBUG] com.zaxxer.hikari.HikariConfig - maximumPoolSize.................10 [DEBUG] com.zaxxer.hikari.HikariConfig - metricRegistry..................com.cod ahale.metrics.MetricRegistry@4152b59f [DEBUG] com.zaxxer.hikari.HikariConfig - minimumIdle.....................10 [DEBUG] com.zaxxer.hikari.HikariConfig - password........................<masked > [DEBUG] com.zaxxer.hikari.HikariConfig - poolName........................HikariP ool-0 [DEBUG] com.zaxxer.hikari.HikariConfig - readOnly........................false [DEBUG] com.zaxxer.hikari.HikariConfig - registerMbeans..................false [DEBUG] com.zaxxer.hikari.HikariConfig - threadFactory................... [DEBUG] com.zaxxer.hikari.HikariConfig - transactionIsolation............ [DEBUG] com.zaxxer.hikari.HikariConfig - username........................ [INFO] com.zaxxer.hikari.HikariDataSource - HikariCP pool HikariPool-0 is starti ng. [DEBUG] com.fg.re.config.DatabaseConfiguration - Configuring Liquibase [INFO] com.fg.re.config.hazelcast.HazelcastCacheRegionFactory - Starting up Haze lcastCacheRegionFactory [DEBUG] com.fg.re.config.MailConfiguration - Configuring mail server [INFO] com.fg.re.config.WebConfigurer - Web application configuration, using pro files: [prod] [DEBUG] com.fg.re.config.WebConfigurer - Initializing Metrics registries [DEBUG] com.fg.re.config.WebConfigurer - Registering Metrics Filter [DEBUG] com.fg.re.config.WebConfigurer - Registering Metrics Servlet [DEBUG] com.fg.re.config.WebConfigurer - Registering Caching HTTP Headers Filter [DEBUG] com.fg.re.config.WebConfigurer - Registering static resources production Filter [DEBUG] com.fg.re.config.WebConfigurer - Registering GZip Filter [INFO] com.fg.re.config.WebConfigurer - Web application fully configured [INFO] com.fg.re.Application - Running with Spring profile(s) : [prod] [INFO] com.fg.re.config.ThymeleafConfiguration - loading non-reloadable mail mes sages resources [WARN] org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebAppl icationContext - Exception encountered during context initialization - cancellin g refresh attempt org.springframework.beans.factory.BeanCreationException: Error creating bean wit h name 'mbeanExporter' defined in class path resource [org/springframework/conte xt/annotation/MBeanExportConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jmx.export.UnableToRegisterMBeanExcepti on: Unable to register MBean [HikariDataSource (HikariPool-0)] with key 'dataSou rce'; nested exception is javax.management.InstanceAlreadyExistsException: com.z axxer.hikari:name=dataSource,type=HikariDataSource at org.springframework.beans.factory.support.AbstractAutowireCapableBean Factory.initializeBean(AbstractAutowireCapableBeanFactory.java:1554) ~[spring-be ans-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBean Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) ~[spring-beans -4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBean Factory.createBean(AbstractAutowireCapableBeanFactory.java:475) ~[spring-beans-4 .0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb ject(AbstractBeanFactory.java:302) ~[spring-beans-4.0.8.RELEASE.jar:4.0.8.RELEAS E] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr y.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-4.0.8.RELEA SE.jar:4.0.8.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBe an(AbstractBeanFactory.java:298) ~[spring-beans-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:193) ~[spring-beans-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory. preInstantiateSingletons(DefaultListableBeanFactory.java:706) ~[spring-beans-4.0 .8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finish BeanFactoryInitialization(AbstractApplicationContext.java:762) ~[spring-context- 4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refres h(AbstractApplicationContext.java:482) ~[spring-context-4.0.8.RELEASE.jar:4.0.8. RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationConte xt.refresh(EmbeddedWebApplicationContext.java:109) [spring-boot-1.1.9.RELEASE.ja r:1.1.9.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:691) [spring-boot-1.1.9.RELEASE.jar:1.1.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java :320) [spring-boot-1.1.9.RELEASE.jar:1.1.9.RELEASE] at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringA pplicationBuilder.java:142) [spring-boot-1.1.9.RELEASE.jar:1.1.9.RELEASE] at org.springframework.boot.context.web.SpringBootServletInitializer.cre ateRootApplicationContext(SpringBootServletInitializer.java:89) [spring-boot-1.1 .9.RELEASE.jar:1.1.9.RELEASE] at org.springframework.boot.context.web.SpringBootServletInitializer.onS tartup(SpringBootServletInitializer.java:51) [spring-boot-1.1.9.RELEASE.jar:1.1. 9.RELEASE] at org.springframework.web.SpringServletContainerInitializer.onStartup(S pringServletContainerInitializer.java:175) [spring-web-4.0.8.RELEASE.jar:4.0.8.R ELEASE] at org.apache.catalina.core.StandardContext.startInternal(StandardContex t.java:5479) [catalina.jar:7.0.55] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.55] at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase .java:901) [catalina.jar:7.0.55] at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:87 7) [catalina.jar:7.0.55] at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649) [catalina.jar:7.0.55] at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083 ) [catalina.jar:7.0.55] at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java: 1880) [catalina.jar:7.0.55] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:51 1) [na:1.8.0_25] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_25 ] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. java:1142) [na:1.8.0_25] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:617) [na:1.8.0_25] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25] Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [HikariDataSource (HikariPool-0)] with key 'dataSource'; nest ed exception is javax.management.InstanceAlreadyExistsException: com.zaxxer.hika ri:name=dataSource,type=HikariDataSource at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstan ce(MBeanExporter.java:608) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.jmx.export.MBeanExporter.registerBeans(MBeanExpor ter.java:533) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.jmx.export.MBeanExporter.afterPropertiesSet(MBean Exporter.java:415) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBean Factory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1613) ~[spring -beans-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBean Factory.initializeBean(AbstractAutowireCapableBeanFactory.java:1550) ~[spring-be ans-4.0.8.RELEASE.jar:4.0.8.RELEASE] ... 28 common frames omitted Caused by: javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:na me=dataSource,type=HikariDataSource at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437) ~[na :1.8.0_25] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRep ository(DefaultMBeanServerInterceptor.java:1898) ~[na:1.8.0_25] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamic MBean(DefaultMBeanServerInterceptor.java:966) ~[na:1.8.0_25] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject( DefaultMBeanServerInterceptor.java:900) ~[na:1.8.0_25] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(D efaultMBeanServerInterceptor.java:324) ~[na:1.8.0_25] at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.j ava:522) ~[na:1.8.0_25] at org.springframework.jmx.support.MBeanRegistrationSupport.doRegister(M BeanRegistrationSupport.java:195) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEA SE] at org.springframework.jmx.export.MBeanExporter.registerBeanInstance(MBe anExporter.java:653) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstan ce(MBeanExporter.java:598) ~[spring-context-4.0.8.RELEASE.jar:4.0.8.RELEASE] ... 32 common frames omitted [INFO] com.fg.re.config.hazelcast.HazelcastCacheRegionFactory - Shutting down Ha zelcastCacheRegionFactory [INFO] com.zaxxer.hikari.pool.HikariPool - HikariCP pool HikariPool-0 is shuttin g down. [DEBUG] com.zaxxer.hikari.pool.HikariPool - Before shutdown pool stats HikariPoo l-0 (total=10, inUse=3, avail=7, waiting=0) [DEBUG] com.zaxxer.hikari.pool.HikariPool - After shutdown pool stats HikariPool -0 (total=0, inUse=0, avail=0, waiting=0) [INFO] com.fg.re.config.CacheConfiguration - Remove Cache Manager metrics [INFO] com.fg.re.config.CacheConfiguration - Closing Cache Manager [INFO] com.hazelcast.core.LifecycleService - [192.168.1.9]:5701 [dev] [3.2.5] Ad dress[192.168.1.9]:5701 is SHUTTING_DOWN [INFO] com.hazelcast.initializer - [192.168.1.9]:5701 [dev] [3.2.5] Destroying n ode initializer. [INFO] com.hazelcast.instance.Node - [192.168.1.9]:5701 [dev] [3.2.5] Hazelcast Shutdown is completed in 31 ms. [INFO] com.hazelcast.core.LifecycleService - [192.168.1.9]:5701 [dev] [3.2.5] Ad dress[192.168.1.9]:5701 is SHUTDOWN [ERROR] org.springframework.boot.SpringApplication - Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean wit h name 'mbeanExporter' defined in class path resource [org/springframework/conte xt/annotation/MBeanExportConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jmx.export.UnableToRegisterMBeanExcepti on: Unable to register MBean [HikariDataSource (HikariPool-0)] with key 'dataSou rce'; nested exception is javax.management.InstanceAlreadyExistsException: com.z axxer.hikari:name=dataSource,type=HikariDataSource at org.springframework.beans.factory.support.AbstractAutowireCapableBean Factory.initializeBean(AbstractAutowireCapableBeanFactory.java:1554) ~[spring-be ans-4.0.8.RELEASE.jar:4.0.8.RELEASE] 

Fresh observations. I used to have two jhipster web clients running on the same cat. Removing another resolved. Can I find out the reason? In production, there may be a high probability that two jappers webapps will work on the same cat.

+23
source share
7 answers

I had a similar problem with two instances of jhipster applications that run on the same tomcat server. I posted this also at https://github.com/jhipster/generator-jhipster/issues/874#issuecomment-113023849

From https://docs.oracle.com/javase/tutorial/jmx/mbeans/standard.html

Each JMX MBean must have an object name. Is the object name an instance of the JMX class? ObjectName and must match the syntax defined by the JMX specification. Namely, the name of the object should contain a domain and a list of key properties.

From http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-jmx

  1. Monitoring and Management JMX Java Management Extensions (JMX) provides a standard mechanism for monitoring and managing applications. By default, Spring Boot will create an MBeanServer with a bean id 'mbeanServer and display any of your beans annotated with Spring JMX annotations (@ManagedResource, @ManagedAttribute, @ManagedOperation).

See the JmxAutoConfiguration class for more details.

Checking the JmxAutoConfiguration code at https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConff I saw that spring.jmx.default-domain exists, which is used in the naming strategy.

Setting this property for some value in one of the app.properties applications of my application.

 spring.jmx.default-domain: test 

Since the domain name is arbitrary, it seems to me a reasonable way to avoid name matches between the two applications.

Since I did not have previous experience with JMX, I would appreciate feedback on this solution.

+27
source

I solved this problem by setting a different spring.jmx.default-domain value for each Spring application on my Tomcat, for example:

 spring.jmx.default-domain=somevalue 

in the application.properties file.

+14
source

The two things I tried and they worked to deploy two Hikari applications in the same cat are as follows: not only change the pool name (1), but also change the bean name for the DataSource (2) configuration.

 @Bean(destroyMethod = "shutdown") public DataSource dataSource2() { HikariConfig config = new HikariConfig(); config.setPoolName("AARSHikaripool-1"); 

The bean name notification is a data source2, while another application has a data source!

Update for JHipster:

Since there is no bean data source anymore, in application.yml add the following:

 spring: jmx: default-domain: [application_name] 
+12
source

Just add below annotation to your configuration file

 @EnableMBeanExport(registration=RegistrationPolicy.IGNORE_EXISTING) 

This will work for you.

+4
source

It seems your application is redeploying, but when it was not deployed, the container did not call the close() or shutdown() HikariDataSource on the HikariDataSource . Spring must have a destroy property (or something similar) that can be set for deployment.

Also, make sure you are using the latest version of HikariCP (2.2.5), if possible, I believe that the old version did not cancel MBeans properly.

EDIT: if you have two WARs in one virtual machine that requires HikariCP and you want to register MBeans, you need to set poolName for each other. I see that it uses the default pool name HikariPool-0 .

+1
source

The following approach was used for me: randomize the pool name jmx domain (spring.jmx.default-domain) (see JmxAutoConfiguration ):

 @Bean public DataSource dataSource() throws SQLException { HikariDataSource dataSource = new HikariDataSource(this); dataSource.setPoolName("dataSource_" + UUID.randomUUID().toString()); return dataSource; } @Bean @ConditionalOnMissingBean(value = ObjectNamingStrategy.class, search = SearchStrategy.CURRENT) public ParentAwareNamingStrategy objectNamingStrategy() { ParentAwareNamingStrategy namingStrategy = new ParentAwareNamingStrategy(new AnnotationJmxAttributeSource()); namingStrategy.setDefaultDomain("domain_" + UUID.randomUUID().toString()); return namingStrategy; } 
+1
source

For me, while working on the AWS lambda function - moving new SpringApplication(MyApp.class); instantiating from the Lambda Handler method for the private static final singleton seems to have solved the problem.

The idea is to prevent reinitialization of HikariPool in the same JVM.

0
source

Source: https://habr.com/ru/post/979495/


All Articles