diff --git a/src/main/java/com/izeye/sample/config/MetricsConfig.java b/src/main/java/com/izeye/sample/config/MetricsConfig.java new file mode 100644 index 0000000..51fcdaf --- /dev/null +++ b/src/main/java/com/izeye/sample/config/MetricsConfig.java @@ -0,0 +1,34 @@ +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 +public class MetricsConfig { + + @Bean + public MeterBinder myMeterBinder() { + return (registry) -> registry.counter("binder.test"); + } + + // FIXME: See https://github.com/spring-projects/spring-boot/issues/26630 + @Bean + public static MetricsRepositoryMethodInvocationListener metricsRepositoryMethodInvocationListener( + MetricsProperties metricsProperties, @Lazy MeterRegistry registry, RepositoryTagsProvider tagsProvider) { + MetricsProperties.Data.Repository properties = metricsProperties.getData().getRepository(); + return new MetricsRepositoryMethodInvocationListener(registry, tagsProvider, properties.getMetricName(), + properties.getAutotime()); + } + +} diff --git a/src/test/java/com/izeye/sample/config/MetricsConfigTests.java b/src/test/java/com/izeye/sample/config/MetricsConfigTests.java new file mode 100644 index 0000000..82f7b1d --- /dev/null +++ b/src/test/java/com/izeye/sample/config/MetricsConfigTests.java @@ -0,0 +1,21 @@ +package com.izeye.sample.config; + +import io.micrometer.core.instrument.MeterRegistry; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +class MetricsConfigTests { + + @Autowired + private MeterRegistry registry; + + @Test + void userDefinedMeterBinderWorks() { + assertThat(this.registry.find("binder.test").counter()).isNotNull(); + } + +}