From 023d945d7f5e66644ec18a3123ec7b5980fb06d9 Mon Sep 17 00:00:00 2001 From: mozzie Date: Fri, 27 Feb 2026 22:39:57 +0800 Subject: [PATCH 1/2] fix(metrics): support new micrometer prometheus package in MetricsSupportUtil Fixes #16109 --- .../dubbo/metrics/utils/MetricsSupportUtil.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java index b304197bb8b..693c9f31620 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java @@ -25,10 +25,14 @@ public static boolean isSupportMetrics() { } public static boolean isSupportPrometheus() { - return isClassPresent("io.micrometer.prometheus.PrometheusConfig") - && isClassPresent("io.prometheus.client.exporter.BasicAuthHttpConnectionFactory") - && isClassPresent("io.prometheus.client.exporter.HttpConnectionFactory") - && isClassPresent("io.prometheus.client.exporter.PushGateway"); + // Micrometer package changed in newer versions: + // io.micrometer.prometheus.* -> io.micrometer.prometheusmetrics.* + boolean micrometerPrometheusPresent = isClassPresent("io.micrometer.prometheus.PrometheusConfig") + || isClassPresent("io.micrometer.prometheusmetrics.PrometheusConfig"); + + // PushGateway classes are optional for exporter-only usage and differ across versions, + // so do not hard-fail prometheus support on them. + return micrometerPrometheusPresent; } private static boolean isClassPresent(String className) { From ef32756a1775f14bdae536cc138b9c0c5e28a4b4 Mon Sep 17 00:00:00 2001 From: mozzie Date: Fri, 27 Feb 2026 23:19:34 +0800 Subject: [PATCH 2/2] test(metrics): add coverage for MetricsSupportUtil prometheus detection --- .../metrics/utils/MetricsSupportUtil.java | 2 +- .../metrics/utils/MetricsSupportUtilTest.java | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/utils/MetricsSupportUtilTest.java diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java index 693c9f31620..7fa9d985dbe 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java @@ -28,7 +28,7 @@ public static boolean isSupportPrometheus() { // Micrometer package changed in newer versions: // io.micrometer.prometheus.* -> io.micrometer.prometheusmetrics.* boolean micrometerPrometheusPresent = isClassPresent("io.micrometer.prometheus.PrometheusConfig") - || isClassPresent("io.micrometer.prometheusmetrics.PrometheusConfig"); + | isClassPresent("io.micrometer.prometheusmetrics.PrometheusConfig"); // PushGateway classes are optional for exporter-only usage and differ across versions, // so do not hard-fail prometheus support on them. diff --git a/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/utils/MetricsSupportUtilTest.java b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/utils/MetricsSupportUtilTest.java new file mode 100644 index 00000000000..9d7854b05a4 --- /dev/null +++ b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/utils/MetricsSupportUtilTest.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.dubbo.metrics.utils; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class MetricsSupportUtilTest { + + @Test + void shouldSupportMetrics() { + Assertions.assertTrue(MetricsSupportUtil.isSupportMetrics()); + } + + @Test + void shouldDetectPrometheusClasspathWithoutThrowing() { + Assertions.assertFalse(MetricsSupportUtil.isSupportPrometheus()); + } +}