From d30fbe958522a468db545bdbf4d9cd17ec0121ef Mon Sep 17 00:00:00 2001 From: izeye Date: Wed, 26 May 2021 22:32:17 +0900 Subject: [PATCH] Apply workaround for https://github.com/spring-projects/spring-boot/issues/26630 --- .../com/izeye/sample/config/MetricsConfig.kt | 39 +++++++++++++++++++ .../izeye/sample/config/MetricsConfigTests.kt | 19 +++++++++ src/test/resources/junit-platform.properties | 1 + 3 files changed, 59 insertions(+) create mode 100644 src/main/kotlin/com/izeye/sample/config/MetricsConfig.kt create mode 100644 src/test/kotlin/com/izeye/sample/config/MetricsConfigTests.kt create mode 100644 src/test/resources/junit-platform.properties diff --git a/src/main/kotlin/com/izeye/sample/config/MetricsConfig.kt b/src/main/kotlin/com/izeye/sample/config/MetricsConfig.kt new file mode 100644 index 0000000..9778b48 --- /dev/null +++ b/src/main/kotlin/com/izeye/sample/config/MetricsConfig.kt @@ -0,0 +1,39 @@ +package com.izeye.sample.config + +import io.micrometer.core.instrument.MeterRegistry +import io.micrometer.core.instrument.binder.MeterBinder +import org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties +import org.springframework.boot.actuate.metrics.data.MetricsRepositoryMethodInvocationListener +import org.springframework.boot.actuate.metrics.data.RepositoryTagsProvider +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import org.springframework.context.annotation.Lazy + +/** + * Configuration for metrics. + * + * @author Johnny Lim + */ +@Configuration +class MetricsConfig { + @Bean + fun myMeterBinder(): MeterBinder { + return MeterBinder { registry: MeterRegistry -> registry.counter("binder.test") } + } + + companion object { + // FIXME: See https://github.com/spring-projects/spring-boot/issues/26630 + @Bean + fun metricsRepositoryMethodInvocationListener( + metricsProperties: MetricsProperties, + @Lazy registry: MeterRegistry, + tagsProvider: RepositoryTagsProvider + ): MetricsRepositoryMethodInvocationListener { + val properties = metricsProperties.data.repository + return MetricsRepositoryMethodInvocationListener( + registry, tagsProvider, properties.metricName, + properties.autotime + ) + } + } +} diff --git a/src/test/kotlin/com/izeye/sample/config/MetricsConfigTests.kt b/src/test/kotlin/com/izeye/sample/config/MetricsConfigTests.kt new file mode 100644 index 0000000..57f64c6 --- /dev/null +++ b/src/test/kotlin/com/izeye/sample/config/MetricsConfigTests.kt @@ -0,0 +1,19 @@ +package com.izeye.sample.config + +import io.micrometer.core.instrument.MeterRegistry +import org.assertj.core.api.Assertions +import org.junit.jupiter.api.Test +import org.springframework.boot.test.context.SpringBootTest + +/** + * Tests for [MetricsConfig]. + * + * @author Johnny Lim + */ +@SpringBootTest +class MetricsConfigTests(val registry: MeterRegistry) { + @Test + fun userDefinedMeterBinderWorks() { + Assertions.assertThat(registry.find("binder.test").counter()).isNotNull + } +} diff --git a/src/test/resources/junit-platform.properties b/src/test/resources/junit-platform.properties new file mode 100644 index 0000000..aae71f1 --- /dev/null +++ b/src/test/resources/junit-platform.properties @@ -0,0 +1 @@ +spring.test.constructor.autowire.mode=all