From 3a739210ce1e3f568791b161290ea45ecb3dcfed Mon Sep 17 00:00:00 2001 From: Tommy Ludwig Date: Thu, 8 Mar 2018 20:48:33 +0900 Subject: [PATCH] Maintain strong reference to PoolStats for Micrometer gauges (#1108) Micrometer's gauges were breaking after the `PoolStats` object they weakly referenced was garbage collected. This change holds a strong reference to the `PoolStats` object in `MicrometerMetricsTracker` to avoid this issue. See http://micrometer.io/docs/concepts#_why_is_my_gauge_reporting_nan_or_disappearing --- .../hikari/metrics/micrometer/MicrometerMetricsTracker.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/zaxxer/hikari/metrics/micrometer/MicrometerMetricsTracker.java b/src/main/java/com/zaxxer/hikari/metrics/micrometer/MicrometerMetricsTracker.java index 01c70c63..f4e44d6e 100644 --- a/src/main/java/com/zaxxer/hikari/metrics/micrometer/MicrometerMetricsTracker.java +++ b/src/main/java/com/zaxxer/hikari/metrics/micrometer/MicrometerMetricsTracker.java @@ -34,9 +34,13 @@ public class MicrometerMetricsTracker implements IMetricsTracker private final Gauge activeConnectionGauge; @SuppressWarnings({"FieldCanBeLocal", "unused"}) private final Gauge pendingConnectionGauge; + @SuppressWarnings({"FieldCanBeLocal", "unused"}) + private final PoolStats poolStats; MicrometerMetricsTracker(final String poolName, final PoolStats poolStats, final MeterRegistry meterRegistry) { + this.poolStats = poolStats; + this.connectionObtainTimer = Timer.builder(METRIC_NAME_WAIT) .description("Connection acquire time") .publishPercentiles(0.95)