2014-11-13 6 views
20

Używam wielu wiosennych aplikacji rozruchowych wewnątrz kontenera tomcat (nie osadzonego - tylko samodzielny kontener tomcat). Jednak przy uruchamianiu aplikacji internetowych występują następujące wyjątki. Nie ma to wpływu na funkcjonalność żadnej z aplikacji internetowych, ale jest jednak czymś, co chciałbym rozwiązać, aby mieć czysty start.Siłownik sprężynowy z wieloma aplikacjami internetowymi w kontenerze tomcat rzuca javax.management.InstanceAlreadyExistsException wyjątek

Każda pomoc w rozwiązaniu tego problemu jest bardzo cenna.

Korzystanie Wiosna 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

Domyślnie wszystkie punkty końcowe są zarejestrowane w domenie 'org.springboot' i mają domyślną nazwę. Można je przesłonić, ustawiając właściwości 'endpoints.jmx. *. Zobacz [tutaj] (http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html). Możesz zmienić domenę dla każdej aplikacji lub ustawić 'endpoints.jmx.unique-name' na 'true'. –

+0

@ M.Deinum - Dziękuję bardzo. Ustawienie true-name na true spowodowało, że trik został wykonany. Jakie punkty końcowe będą rejestrowane tak jak teraz ?. Ponadto, jeśli mógłbyś dodać to jako odpowiedź, przyjmuję to, aby pomóc także innym. Dzięki jeszcze raz! – sat

+0

Nie mam pojęcia, jakie będą rzeczywiste nazwy, mogą zależeć od zastosowanej strategii bazowej. Może zajść potrzeba przejrzenia części rejestracji Spring End w punkcie końcowym. –

Odpowiedz

32

Domyślnie wszystkie punkty końcowe są zarejestrowane w domenie org.springboot iz domyślną nazwą. Można je przesłonić, ustawiając właściwości endpoints.jmx.*. Zobacz here.

Możesz zmienić domenę dla każdej aplikacji lub ustawić wartość na endpoints.jmx.unique-names.

23

Wyłącz JMX w application.properties dodając następującą właściwość

spring.jmx.enabled = false 
2

unikalnych nazw nie działa dla mnie. Musiałem również dodać domyślną domenę.

Oto mój kod yml

spring: 
    jmx: 
    default-domain: agentservice 

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

do zwiększenia odpowiedzi Gondy, który głosowałem w górę, poniżej znajduje się link, który mówi dokładnie dlaczego to działa. PhilWebb mówi: "Okazuje się, że rejestrowanie informacji JMX domyślnie może spowodować pewne problemy, jeśli użyjesz Spring Test Context Framework. Domyślnie testy z @ContextConfiguration utrzymują konteksty otwarte" i "Myślę, że musimy zmienić wiosnę. datasource.jmx włączoną domyślnie false i uczynić ten jeden opt-in”

Zobacz GitHub (w "philwebb skomentował w dniu 7 listopada 2014")


doceniam to existing unikalną odpowiedź .ale ten problem został bije mnie przez jakiś czas, odpowiedź Gondy pomógł mi, a potem następnie okazało się, dlaczego i chciałem podzielić się że dodatkowe informacje w jedyny sposób dla mnie dostępne

2

wiosny: JMX: domyślną domenę : agentservice

punktów końcowych: JMX: domen: agentservice unikalnych nazw: true

Works powyższych config ze mną podczas wdrażania wielu instancji na samym JVM