new mvn development spring-boot hazelcast jhipster

spring boot - mvn - No se puede registrar el MBean[HikariDataSource(HikariPool-0)] con la clave ''dataSource''



jhipster yarn (5)

Dos cosas que probé y que trabajaron para desplegar dos aplicaciones Hikari en el mismo tomcat son: No solo cambiar el nombre de grupo (1) sino también el nombre del bean para la configuración de DataSource (2).

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

¡Note que el nombre del bean es datasource2 mientras que otra aplicación tiene fuente de datos!

Actualización para JHipster:

Como ya no hay ningún bean de fuente de datos, en application.yml agregue lo siguiente:

spring: jmx: default-domain: [application_name]

Estoy obteniendo un error por debajo del modo prod para la combinación (Java8 + Oauth2 + MySql + Hazelcast + sin sesiones http agrupadas). El modo Dev ha funcionado bien.

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

En el registro, la primera parte de la creación del origen de datos (hazelcast) dice modo [dev]. No estoy seguro de que esto sea deliberado.

Por favor ayúdame a resolver el problema.

Iniciar sesión

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] o.s.b.l.LoggingApplicat 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 t.q.size=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]

Nueva observación. Anteriormente tenía dos aplicaciones web jhipster ejecutándose en el mismo tomcat. Eliminar el otro ha quitado el error. ¿Puedo saber la razón? En producción, puede haber una alta posibilidad de que se ejecuten dos aplicaciones web jhipster en el mismo tomcat.


El siguiente enfoque funcionó para mí, aleatorizar el nombre de grupo de dominio jmx (spring.jmx.default-domain) (consulte https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.java ):

@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; }


Estaba teniendo un problema similar, con 2 instancias de aplicación jhipster corriendo en un solo servidor tomcat. También publiqué esto en https://github.com/jhipster/generator-jhipster/issues/874#issuecomment-113023849

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

Cada JMX MBean debe tener un nombre de objeto. ¿El nombre del objeto es una instancia de la clase JMX? ObjectName y debe ajustarse a la sintaxis definida por la especificación JMX. A saber, el nombre del objeto debe contener un dominio y una lista de propiedades clave.

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

  1. El monitoreo y la administración a través de JMX Java Management Extensions (JMX) proporcionan un mecanismo estándar para monitorear y administrar aplicaciones. Por defecto, Spring Boot creará un MBeanServer con el ID de bean ''mbeanServer'' y expondrá cualquiera de sus beans anotados con anotaciones Spring JMX (@ManagedResource, @ManagedAttribute, @ManagedOperation).

Vea la clase JmxAutoConfiguration para más detalles.

Verificando el código de JmxAutoConfiguration en https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.java Vi que hay una propiedad spring.jmx.default-domain que se usa en la estrategia de nombres.

Establecer esa propiedad en algún valor en una de las aplicaciones.properties de mis aplicaciones solucionó este problema

spring.jmx.default-domain: test

Como el nombre de dominio es arbitrario, me parece una forma razonable de evitar conflictos de nombres entre dos aplicaciones.

Como no tenía experiencia previa con JMX, agradecería recibir comentarios sobre esta solución.


Esto parece que su aplicación se está volviendo a implementar, pero cuando se desinstaló, el contenedor no llamó al método close() o shutdown() en el HikariDataSource . Spring debe tener una propiedad de "destruir" (o algo similar) que se pueda configurar para la desinstalación.

Además, asegúrese de que está utilizando la última versión de HikariCP (2.2.5), si es posible, creo que una versión antigua no anuló el registro de MBeans correctamente.

EDITAR: si tiene dos WAR en la misma máquina virtual que necesitan HikariCP y desea registrar MBeans, debe configurar cada uno para usar un poolName diferente. Veo que está usando el nombre de grupo predeterminado de HikariPool-0 .


spring.jmx.default-domain este tipo de problema estableciendo un valor diferente de la propiedad spring.jmx.default-domain para cada aplicación Spring en mi Tomcat como:

spring.jmx.default-domain=somevalue

en el archivo application.properties.