2014-11-13 10 views
20

Sto eseguendo più applicazioni di avvio a molla all'interno di un contenitore tomcat (non incorporato - solo un contenitore tomcat standalone). Tuttavia, mi sta dando le seguenti eccezioni quando lancio le applicazioni web. Non sta influenzando la funzionalità di nessuna delle applicazioni web, ma è comunque qualcosa che mi piacerebbe risolvere per avere un avvio pulito.Attuatore Spring Boot con più applicazioni Web in un contenitore Tomcat genera javax.management.InstanceAlreadyExistsException exception

Qualsiasi aiuto su come risolvere questo problema è molto apprezzato.

Utilizzando Primavera Boot 1.1.7

org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [[email protected]14bee2f1] wit 
h key 'metricsEndpoint'; nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.boot:type=Endpoint,name=metricsEndpoint 
     at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:609) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.registerEndpoint(EndpointMBeanExporter.java:162) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.locateAndRegisterEndpoints(EndpointMBeanExporter.java:142) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.doStart(EndpointMBeanExporter.java:134) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.start(EndpointMBeanExporter.java:257) 
     at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) 
     at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51) 
     at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346) 
     at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149) 
     at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112) 
     at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:775) 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:131) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:485) 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109) 
     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) 
     at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:142) 

org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [[email protected]1be9493f] with key 'traceEndpoint'; nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.boot:type=Endpoint,name=traceEndpoint 
     at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:609) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.registerEndpoint(EndpointMBeanExporter.java:162) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.locateAndRegisterEndpoints(EndpointMBeanExporter.java:142) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.doStart(EndpointMBeanExporter.java:134) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.start(EndpointMBeanExporter.java:257) 
     at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) 
     at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51) 
     at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346) 

org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [[email protected]533a21cd] with key 'dumpEndpoint'; nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.boot:type=Endpoint,name=dumpEndpoint 
     at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:609) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.registerEndpoint(EndpointMBeanExporter.java:162) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.locateAndRegisterEndpoints(EndpointMBeanExporter.java:142) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.doStart(EndpointMBeanExporter.java:134) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.start(EndpointMBeanExporter.java:257) 
     at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) 
     at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51) 
     at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346) 
     at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149) 

org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [[email protected]695b578c] with key 'autoConfigurationAuditEndpoint'; nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.boot:type=Endpoint,name=autoConfigurationAuditEndpoint 
     at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:609) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.registerEndpoint(EndpointMBeanExporter.java:162) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.locateAndRegisterEndpoints(EndpointMBeanExporter.java:142) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.doStart(EndpointMBeanExporter.java:134) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.start(EndpointMBeanExporter.java:257) 
     at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) 
     at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51) 
     at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346) 
     at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149) 

org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.[email protected]7271ef13] with key 'shutdownEndpoint'; nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.boot:type=Endpoint,name=shutdownEndpoint 
     at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:609) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.registerEndpoint(EndpointMBeanExporter.java:162) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.locateAndRegisterEndpoints(EndpointMBeanExporter.java:142) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.doStart(EndpointMBeanExporter.java:134) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.start(EndpointMBeanExporter.java:257) 
     at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) 
     at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51) 

org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [[email protected]34ea9086] with key 'configurationPropertiesReportEndpoint'; nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.boot:type=Endpoint,name=configurationPropertiesReportEndpoint 
     at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:609) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.registerEndpoint(EndpointMBeanExporter.java:162) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.locateAndRegisterEndpoints(EndpointMBeanExporter.java:142) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.doStart(EndpointMBeanExporter.java:134) 
     at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.start(EndpointMBeanExporter.java:257) 
     at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) 
     at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51) 
     at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346) 
     at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149) 
+0

Per impostazione predefinita tutti gli endpoint sono registrati sotto il dominio 'org.springboot' e con un nome predefinito. Questi possono essere sovrascritti impostando le proprietà 'endpoints.jmx. *'. Vedi [qui] (http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html). Potresti voler cambiare il dominio per applicazione o impostare 'endpoints.jmx.unique-name' su' true'. –

+0

@ M.Deinum - Grazie mille. Impostare il nome univoco su true ha funzionato. Quali sarebbero gli endpoint registrati ora? Inoltre, se potessi, per favore, aggiungerla come risposta, la accetterò in modo da aiutare anche gli altri. Grazie ancora! – sat

+0

Non ho idea di quali saranno i nomi effettivi, potrebbe dipendere dalla strategia sottostante utilizzata. Potrebbe essere necessario dare un'occhiata alla parte di registrazione degli endpoint di Spring Boot. –

risposta

32

Per impostazione predefinita tutti gli endpoint sono registrati sotto il dominio org.springboot e con un nome di default. Questi possono essere sovrascritti impostando le proprietà endpoints.jmx.*. Vedi here.

È possibile modificare il dominio per applicazione o impostare endpoints.jmx.unique-names su true.

23

Disabilita JMX in application.properties aggiungendo seguente

spring.jmx.enabled = false 
2

nomi unici non ha funzionato per me. Ho dovuto aggiungere anche un dominio predefinito.

Ecco il mio codice yml

spring: 
    jmx: 
    default-domain: agentservice 

endpoints: 
    jmx: 
    domain: agentservice 
    unique-names: true 
1

Per aumentare la risposta di Gondy, che ho votato up, sotto è un link che dice esattamente perché funziona. PhilWebb dice "Si scopre che la registrazione delle informazioni JMX per impostazione predefinita può causare alcuni problemi se si utilizza il framework di prova Spring's Test. Per impostazione predefinita, i test con @ContextConfiguration mantengono i contesti aperti" e "Penso che sia necessario cambiare la primavera. datasource.jmx abilitato di default su false e fanno di questo un opt-in"

Vedi GitHub (a "philwebb commentato il 7 nov 2014")


apprezzo questo non è una risposta unica .ma questo problema è stato mi batte per un certo tempo, la risposta di Gondy mi ha aiutato e poi successivamente scoperto perché e ha voluto condividere le informazioni in più nel solo modo a mia disposizione

2

primavera: JMX: default-dominio : AgentService

endpoint: JMX: dominio: AgentService uniche-nomi: true

Opere sopra config con me, mentre la distribuzione di istanze multiple sulla stessa JVM

Problemi correlati