Refactor Spring Integration metrics support
Update Spring Integration metrics support since Spring Integration `4.3.6`+ no longer needs `spring-integration-jmx` enable `MessageChannel`, `MessageHandler` and `MessageSource` metrics. - Add `IntegrationManagementConfiguration` conditional auto-configuration to provide `@EnableIntegrationManagement` when JMX is `enabled` or there is no `IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME` bean. By default this bean doesn't exist and you explicitly should declare it (e.g. via `@EnableIntegrationManagement`) if you would like to collect metrics. At the same time Spring Integration enables it when JMX management is present (that is a purpose of that new `IntegrationManagementConfiguration`) - Change `SpringIntegrationMetricReader` to read metrics from the `IntegrationManagementConfigurer`, not `IntegrationMBeanExporter` - Change `PublicMetricsAutoConfiguration` to register `IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME` bean if not present. Since we are here in `actuator`, therefore we are interested in the metrics for SI as well. - Since we don't need JMX for the metrics any more, remove SI-JMX dependency from the `spring-boot-starter-integration`. - Remove `IntegrationManagementConfiguration` modification from the `integrationMbeanExporter()`, since that looks like mutation of an external object, when end-user would prefer their own options. Therefore we don't need `ObjectProvider<IntegrationManagementConfigurer>`, too - Add missed `MessageSourceMetrics` gathering for the `SpringIntegrationMetricReader` Closes gh-7722
This commit is contained in:
committed by
Phillip Webb
parent
2e0f87e753
commit
d69e43b433
@@ -21,8 +21,6 @@ import javax.management.MBeanServer;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.BeanFactoryAware;
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
@@ -35,6 +33,7 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.integration.config.EnableIntegration;
|
||||
import org.springframework.integration.config.EnableIntegrationManagement;
|
||||
import org.springframework.integration.jmx.config.EnableIntegrationMBeanExport;
|
||||
import org.springframework.integration.monitor.IntegrationMBeanExporter;
|
||||
import org.springframework.integration.support.management.IntegrationManagementConfigurer;
|
||||
@@ -67,17 +66,10 @@ public class IntegrationAutoConfiguration {
|
||||
protected static class IntegrationJmxConfiguration
|
||||
implements EnvironmentAware, BeanFactoryAware {
|
||||
|
||||
private final IntegrationManagementConfigurer configurer;
|
||||
|
||||
private BeanFactory beanFactory;
|
||||
|
||||
private RelaxedPropertyResolver propertyResolver;
|
||||
|
||||
protected IntegrationJmxConfiguration(
|
||||
@Qualifier(IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME) ObjectProvider<IntegrationManagementConfigurer> configurerProvider) {
|
||||
this.configurer = configurerProvider.getIfAvailable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
|
||||
this.beanFactory = beanFactory;
|
||||
@@ -100,17 +92,25 @@ public class IntegrationAutoConfiguration {
|
||||
if (StringUtils.hasLength(server)) {
|
||||
exporter.setServer(this.beanFactory.getBean(server, MBeanServer.class));
|
||||
}
|
||||
if (this.configurer != null) {
|
||||
if (this.configurer.getDefaultCountsEnabled() == null) {
|
||||
this.configurer.setDefaultCountsEnabled(true);
|
||||
}
|
||||
if (this.configurer.getDefaultStatsEnabled() == null) {
|
||||
this.configurer.setDefaultStatsEnabled(true);
|
||||
}
|
||||
}
|
||||
return exporter;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnClass({EnableIntegrationManagement.class, EnableIntegrationMBeanExport.class})
|
||||
@ConditionalOnMissingBean(value = IntegrationManagementConfigurer.class,
|
||||
name = IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME,
|
||||
search = SearchStrategy.CURRENT)
|
||||
@ConditionalOnProperty(prefix = "spring.jmx", name = "enabled", havingValue = "true", matchIfMissing = true)
|
||||
protected static class IntegrationManagementConfiguration {
|
||||
|
||||
@Configuration
|
||||
@EnableIntegrationManagement(defaultCountsEnabled = "true", defaultStatsEnabled = "true")
|
||||
protected static class EnableIntegrationManagementConfiguration {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.integration.support.channel.HeaderChannelRegistry;
|
||||
import org.springframework.integration.support.management.IntegrationManagementConfigurer;
|
||||
import org.springframework.jmx.export.MBeanExporter;
|
||||
import org.springframework.test.context.support.TestPropertySourceUtils;
|
||||
|
||||
@@ -86,12 +87,14 @@ public class IntegrationAutoConfigurationTests {
|
||||
MBeanServer mBeanServer = this.context.getBean(MBeanServer.class);
|
||||
assertDomains(mBeanServer, true, "org.springframework.integration",
|
||||
"org.springframework.integration.monitor");
|
||||
assertThat(this.context.getBean(IntegrationManagementConfigurer.MANAGEMENT_CONFIGURER_NAME)).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void disableJmxIntegration() {
|
||||
load("spring.jmx.enabled=false");
|
||||
assertThat(this.context.getBeansOfType(MBeanServer.class)).hasSize(0);
|
||||
assertThat(this.context.getBeansOfType(IntegrationManagementConfigurer.class)).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user