diff --git a/batch/build.gradle b/batch/build.gradle index 6cf345a..ebfd361 100644 --- a/batch/build.gradle +++ b/batch/build.gradle @@ -35,5 +35,6 @@ dependencies { runtimeOnly 'org.hsqldb:hsqldb' testImplementation project(':test-common') + testImplementation 'io.micrometer:micrometer-test' testImplementation 'org.springframework.boot:spring-boot-starter-test' } diff --git a/batch/src/main/java/com/example/micrometer/ManualConfiguration.java b/batch/src/main/java/com/example/micrometer/ManualConfiguration.java new file mode 100644 index 0000000..26a78b9 --- /dev/null +++ b/batch/src/main/java/com/example/micrometer/ManualConfiguration.java @@ -0,0 +1,33 @@ +package com.example.micrometer; + +import io.micrometer.core.instrument.Metrics; +import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler; +import io.micrometer.observation.ObservationRegistry; +import io.micrometer.tracing.Tracer; +import io.micrometer.tracing.handler.DefaultTracingObservationHandler; +import org.springframework.batch.core.configuration.annotation.BatchObservabilityBeanPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * In this class we'll add all the manual configuration required for Observability to + * work. + */ +@Configuration(proxyBeanMethods = false) +public class ManualConfiguration { + + @Bean + public ObservationRegistry observationRegistry(Tracer tracer) { + ObservationRegistry observationRegistry = ObservationRegistry.create(); + observationRegistry.observationConfig() + .observationHandler(new DefaultMeterObservationHandler(Metrics.globalRegistry)) + .observationHandler(new DefaultTracingObservationHandler(tracer)); + return observationRegistry; + } + + @Bean + public BatchObservabilityBeanPostProcessor batchObservabilityBeanPostProcessor() { + return new BatchObservabilityBeanPostProcessor(); + } + +} diff --git a/batch/src/test/java/com/example/micrometer/BatchApplicationTests.java b/batch/src/test/java/com/example/micrometer/BatchApplicationTests.java new file mode 100644 index 0000000..6272765 --- /dev/null +++ b/batch/src/test/java/com/example/micrometer/BatchApplicationTests.java @@ -0,0 +1,22 @@ +package com.example.micrometer; + +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.tck.MeterRegistryAssert; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability; +import org.springframework.boot.test.context.SpringBootTest; + +@AutoConfigureObservability +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "debug=true") +class BatchApplicationTests { + + @Autowired + MeterRegistry meterRegistry; + + @Test + void should_record_metrics() { + MeterRegistryAssert.then(meterRegistry).hasTimerWithNameAndTagKeys("spring.batch.job", "spring.batch.step"); + } + +}