Add config property for Spring Integration component observation

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
pull/33209/head
artembilan 2 years ago committed by Andy Wilkinson
parent 6d8a1c90a4
commit b87d5c728d

@ -209,7 +209,8 @@ public class IntegrationAutoConfiguration {
@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 {
}

@ -416,6 +416,12 @@ public class IntegrationProperties {
*/
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;
}
@ -424,6 +430,14 @@ public class IntegrationProperties {
this.defaultLoggingEnabled = defaultLoggingEnabled;
}
public List<String> getObservationPatterns() {
return this.observationPatterns;
}
public void setObservationPatterns(List<String> observationPatterns) {
this.observationPatterns = observationPatterns;
}
}
}

@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit;
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;
@ -62,6 +63,8 @@ import org.springframework.integration.context.IntegrationContextUtils;
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;
@ -491,6 +494,17 @@ class IntegrationAutoConfigurationTests {
}
@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 {

Loading…
Cancel
Save