Skip to content

fix(micrometer): add MicrometerOutboxListener to ConditionalOnClass for Okapi Spring auto configuration class - #85

Open
rawo wants to merge 1 commit into
mainfrom
bugfix/micrometer-depedency
Open

fix(micrometer): add MicrometerOutboxListener to ConditionalOnClass for Okapi Spring auto configuration class#85
rawo wants to merge 1 commit into
mainfrom
bugfix/micrometer-depedency

Conversation

@rawo

@rawo rawo commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

#84

Fix: add MicrometerOutboxListener to the class-level @ConditionalOnClass, so the whole autoconfiguration is skipped (not just attempted and failed) when okapi-micrometer isn't on the classpath.

Copilot AI review requested due to automatic review settings July 28, 2026 15:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a Spring Boot autoconfiguration edge case where OkapiMicrometerAutoConfiguration could be loaded when Micrometer is present (e.g., via Actuator) but okapi-micrometer is not, leading to NoClassDefFoundError at startup (Issue #84). It tightens the classpath guard and adds a regression test to ensure the autoconfiguration is fully skipped when okapi-micrometer classes are absent.

Changes:

  • Extend the class-level @ConditionalOnClass guard in OkapiMicrometerAutoConfiguration to also require an okapi-micrometer type (via class name string).
  • Add a Spring Boot FilteredClassLoader-based test covering the “MeterRegistry present, okapi-micrometer missing” scenario and a sanity check for the positive path.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
okapi-spring-boot/src/main/kotlin/com/softwaremill/okapi/springboot/OkapiMicrometerAutoConfiguration.kt Strengthens classpath-based conditional loading to avoid NoClassDefFoundError when okapi-micrometer is not on the classpath.
okapi-spring-boot/src/test/kotlin/com/softwaremill/okapi/springboot/OkapiMicrometerAutoConfigurationTest.kt Adds regression coverage verifying autoconfiguration is skipped when MicrometerOutboxListener is hidden from the context classloader.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +42 to +53
@ConditionalOnClass(
name = [
// A consuming app can easily have MeterRegistry on the classpath (e.g. via Spring Boot
// Actuator) without depending on okapi-micrometer at all -- MeterRegistry alone is not
// evidence okapi-micrometer is present. This class directly references
// MicrometerOutboxListener/MicrometerOutboxMetrics/OutboxMetricsRefresher below, so without
// this guard, Spring's condition/annotation evaluation would try to load this class on
// such a classpath and fail with NoClassDefFoundError instead of just skipping it.
"io.micrometer.core.instrument.MeterRegistry",
"com.softwaremill.okapi.micrometer.MicrometerOutboxListener",
],
)
@endrju19 endrju19 self-assigned this Jul 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants