Skip to content

Commit

Permalink
Add config property for Spring Integration component observation
Browse files Browse the repository at this point in the history
Spring Integration has introduced a new observationPatterns attribute
on EnableIntegrationManagement. Spring Boot auto-configures
EnableIntegrationManagement so this commit adds a property that
allows users to configure the patterns without declaring the
annotation themselves.

See gh-33099
  • Loading branch information
artembilan authored and wilkinsona committed Nov 14, 2022
1 parent 6d8a1c9 commit b87d5c7
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
Expand Up @@ -209,7 +209,8 @@ protected static class IntegrationManagementConfiguration {

@Configuration(proxyBeanMethods = false)
@EnableIntegrationManagement(
defaultLoggingEnabled = "${spring.integration.management.default-logging-enabled:true}")
defaultLoggingEnabled = "${spring.integration.management.default-logging-enabled:true}",
observationPatterns = "${spring.integration.management.observation-patterns:}")
protected static class EnableIntegrationManagementConfiguration {

}
Expand Down
Expand Up @@ -416,6 +416,12 @@ public static class Management {
*/
private boolean defaultLoggingEnabled = true;

/**
* Comma-separated simple patterns to match integration components for observation
* instrumentation.
*/
private List<String> observationPatterns = new ArrayList<>();

public boolean isDefaultLoggingEnabled() {
return this.defaultLoggingEnabled;
}
Expand All @@ -424,6 +430,14 @@ public void setDefaultLoggingEnabled(boolean defaultLoggingEnabled) {
this.defaultLoggingEnabled = defaultLoggingEnabled;
}

public List<String> getObservationPatterns() {
return this.observationPatterns;
}

public void setObservationPatterns(List<String> observationPatterns) {
this.observationPatterns = observationPatterns;
}

}

}
Expand Up @@ -24,6 +24,7 @@
import javax.management.MBeanServer;
import javax.sql.DataSource;

import io.micrometer.observation.ObservationRegistry;
import io.rsocket.transport.ClientTransport;
import io.rsocket.transport.netty.client.TcpClientTransport;
import org.assertj.core.api.InstanceOfAssertFactories;
Expand Down Expand Up @@ -62,6 +63,8 @@
import org.springframework.integration.core.MessageSource;
import org.springframework.integration.endpoint.MessageProcessorMessageSource;
import org.springframework.integration.gateway.RequestReplyExchanger;
import org.springframework.integration.handler.BridgeHandler;
import org.springframework.integration.handler.LoggingHandler;
import org.springframework.integration.handler.MessageProcessor;
import org.springframework.integration.rsocket.ClientRSocketConnector;
import org.springframework.integration.rsocket.IntegrationRSocketEndpoint;
Expand Down Expand Up @@ -491,6 +494,17 @@ void integrationManagementLoggingCanBeDisabled() {

}

@Test
void integrationManagementInstrumentedWithObservation() {
this.contextRunner.withPropertyValues("spring.integration.management.observation-patterns=testHandler")
.withBean("testHandler", LoggingHandler.class, () -> new LoggingHandler("warn"))
.withBean(ObservationRegistry.class, ObservationRegistry::create)
.withBean(BridgeHandler.class, BridgeHandler::new).run((context) -> {
assertThat(context).getBean("testHandler").extracting("observationRegistry").isNotNull();
assertThat(context).getBean(BridgeHandler.class).extracting("observationRegistry").isNull();
});
}

@Configuration(proxyBeanMethods = false)
static class CustomMBeanExporter {

Expand Down

0 comments on commit b87d5c7

Please sign in to comment.