Fehler beim aufheben der Registrierung DataSource JMX-MBean Beim Herunterfahren eine Spring-Boot-Anwendung

Habe ich eine einfache Spring-Boot-Anwendung mit org.apache.Unterhaus.dbcp2.BasicDataSource als dataSource bean.

Datenquelle ausgesetzt ist als MBean automatisch von Spring boot.

Die Bohne Erklärung:

@Bean
public DataSource dataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setUrl(dbUrl);
    dataSource.setDriverClassName(jdbcDriver);
    dataSource.setUsername(dbUserName);
    dataSource.setPassword(dbPassword);
    return dataSource;
}

Alles funktioniert einwandfrei . Aber ich sehe den Fehler beim Herunterfahren der Anwendung. Dieser Fehler tritt nur beim ausführen der ausführbaren jar. Bei der Verwendung von Gradle Frühjahr plugin (gradle bootRun), diese wird nicht angezeigt.

javax.management.InstanceNotFoundException: org.apache.commons.dbcp2:name=dataSource,type=BasicDataSource
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:427)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:415)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:546)
    at org.apache.commons.dbcp2.BasicDataSource.close(BasicDataSource.java:1822)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:350)
    at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:273)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:540)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:516)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:827)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:485)
    at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:921)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:895)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.doClose(EmbeddedWebApplicationContext.java:152)
    at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:809)

Frage ich mich,
1. Wie funktioniert das bean ausgesetzt, als JMX MBean?
2. Wie man richtig die Registrierung dieser MBean?

Dies scheint nicht zu haben etwas zu tun mit Boot. Die datasource selbst versucht, aufheben der Registrierung von einem JMX-domain und scheitert. Wie über die Suche, dass Daten, die Art der Quelle der Dokumentation? Irgendeinen Grund, warum Sie nicht verwenden können, die Infrastruktur, die das boot bietet durch die Art und Weise?
Stolperte über dieses, wie ich erlebt haben das gleiche Problem. Es ist eigentlich kein Fehler - log meldet den Zustand als eine Warnung. Warum nicht verwenden Sie die Boot-Daten Quellen, ich würde vermuten, eine Vermutung, dass die OP will, um die Feinabstimmung der Verbindungs-pooling, und wenn Sie nicht in einem container (das wäre-pool für Sie), Sie nicht wirklich bekommen, eine zusammengefasste Verbindung von Boot (SimpleDriverDataSource nicht wirklich geben Ihnen zusammengefassten verbindungen). Ich würde gerne wissen, wie man dieses Problem beheben mit DBCP2, aber wenn es nur eine Warnung, die Auftritt, auf Herunterfahren, ich würde nicht zu viel sorgen darüber.
Das kommt von der Feder. Wie @Wird gesagt, dies ist nur eine Warnung. Die BasicDataSource versucht, aufheben der Registrierung, aber ist schon nicht eingetragenen durch die Feder (destroy() in MBeanExporter). Somit sollte es kein problem sein.

InformationsquelleAutor jlai | 2014-07-25

Schreibe einen Kommentar