Spring Boot 2 Actuator Starter 中的 Nullpointer w。 Tomcat指标

Posted

技术标签:

【中文标题】Spring Boot 2 Actuator Starter 中的 Nullpointer w。 Tomcat指标【英文标题】:Nullpointer in Spring Boot 2 Actuator Starter w. TomcatMetrics 【发布时间】:2019-10-01 16:41:49 【问题描述】:

我最近将我们的系统从 Spring Boot 1.5 升级到 2.1.3 并添加了spring-boot-starter-actuator。显然,有些地方配置错误,因为TomcatMetrics::registerMetricsEventually 中有一个NullPointerException

java.lang.NullPointerException: null
    at io.micrometer.core.instrument.binder.tomcat.TomcatMetrics.lambda$registerMetricsEventually$aa4da135$1(TomcatMetrics.java:260)
    at java.management/javax.management.NotificationBroadcasterSupport.sendNotification(NotificationBroadcasterSupport.java:238)
    at java.management/javax.management.MBeanServerDelegate.sendNotification(MBeanServerDelegate.java:211)
    at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.sendNotification(DefaultMBeanServerInterceptor.java:1473)
    at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1867)
    at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:955)
    at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:890)
    at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320)
    at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
    at org.apache.tomcat.util.modeler.Registry.registerComponent(Registry.java:639)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.register(AbstractProtocol.java:1059)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:823)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)

空指针出现在这里:

return objectName.getDomain().equals(getJmxDomain()) && objectName.getKeyProperty(key).equals(value);

因为objectName.getKeyProperty("j2eeType") 返回null。

这是否表明某些配置明显错误?

【问题讨论】:

github.com/spring-projects/spring-boot/wiki/… 你能发布你的 gradle/maven 依赖吗?请务必检查您要使用的千分尺版本是否适用于 boot 2.1.x。 我有同样的问题,有什么想法吗? 【参考方案1】:

我正在运行下面显示的 spring boot 2.1.8 依赖项,甚至为千分尺的 pom 添加了运行时范围,但它没有帮助。 Actuator 正在寻找同一个键(“j2eeType”)的值,而不是优雅地处理它。

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-actuator-autoconfigure</artifactId>
     <version>2.1.8.RELEASE</version>
     <scope>compile</scope>
 </dependency>
 <dependency>
     <groupId>io.micrometer</groupId>
     <artifactId>micrometer-core</artifactId>
     <version>1.1.6</version>
     <scope>runtime</scope>
 </dependency>

【讨论】:

以上是关于Spring Boot 2 Actuator Starter 中的 Nullpointer w。 Tomcat指标的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Actuator 的“httptrace”端点在 Spring Boot 2.2.0 中不再存在

Spring Boot Actuator 2.0 使用

Spring Boot 2.x Actuator

spring-boot 监控 Actuator

关于spring-boot-actuator的httptrace端点不生效问题解决办法

Spring Boot Actuator 整合 Prometheus