From dda7bea0a3e026237353ff04c8ee94e3e025a977 Mon Sep 17 00:00:00 2001 From: Haotian Zhang <928016560@qq.com> Date: Tue, 14 Feb 2023 17:12:02 +0800 Subject: [PATCH] fix:fix config rebinder bean conflict. --- README-zh.md | 2 +- README.md | 2 +- .../PolarisConfigAutoConfiguration.java | 3 ++- .../annotation/SpringValueProcessorTest.java | 3 +++ ...arisLoadBalancerAutoConfigurationTest.java | 27 +++++++++++++++---- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/README-zh.md b/README-zh.md index e94af3506..5b61abfa6 100644 --- a/README-zh.md +++ b/README-zh.md @@ -79,7 +79,7 @@ Spring Cloud Tencent 所有组件都已上传到 Maven 中央仓库,只需要 com.tencent.cloud spring-cloud-tencent-dependencies - 1.9.0-2021.0.5 + 1.9.1-2021.0.5 pom import diff --git a/README.md b/README.md index 76e275a00..f45a22251 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ For example: com.tencent.cloud spring-cloud-tencent-dependencies - 1.9.0-2021.0.5 + 1.9.1-2021.0.5 pom import diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/PolarisConfigAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/PolarisConfigAutoConfiguration.java index aa3198435..f336be29c 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/PolarisConfigAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/PolarisConfigAutoConfiguration.java @@ -39,6 +39,7 @@ import org.springframework.cloud.context.properties.ConfigurationPropertiesRebin import org.springframework.cloud.context.refresh.ContextRefresher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; /** * polaris config module auto configuration at init application context phase. @@ -60,7 +61,7 @@ public class PolarisConfigAutoConfiguration { } @Bean - @ConditionalOnMissingBean(search = SearchStrategy.CURRENT) + @Primary @ConditionalOnReflectRefreshType public ConfigurationPropertiesRebinder affectedConfigurationPropertiesRebinder( ConfigurationPropertiesBeans beans) { diff --git a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/spring/annotation/SpringValueProcessorTest.java b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/spring/annotation/SpringValueProcessorTest.java index b4bd33afd..3a09233ba 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/spring/annotation/SpringValueProcessorTest.java +++ b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/spring/annotation/SpringValueProcessorTest.java @@ -81,6 +81,7 @@ public class SpringValueProcessorTest { .withConfiguration(AutoConfigurations.of(RefreshAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(ValueTest.class)) .withConfiguration(AutoConfigurations.of(PolarisConfigAutoConfiguration.class)) + .withAllowBeanDefinitionOverriding(true) .withPropertyValues("spring.application.name=" + "conditionalOnConfigReflectEnabledTest") .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081") .withPropertyValues("spring.cloud.polaris.config.refresh-type=" + RefreshType.REFLECT) @@ -114,6 +115,7 @@ public class SpringValueProcessorTest { .withConfiguration(AutoConfigurations.of(RefreshAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(ValueTest.class)) .withConfiguration(AutoConfigurations.of(PolarisConfigAutoConfiguration.class)) + .withAllowBeanDefinitionOverriding(true) .withPropertyValues("spring.application.name=" + "conditionalOnConfigReflectEnabledTest") .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081") .withPropertyValues("spring.cloud.polaris.config.refresh-type=" + RefreshType.REFLECT) @@ -147,6 +149,7 @@ public class SpringValueProcessorTest { .withConfiguration(AutoConfigurations.of(RefreshAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(XMLBeamDefinitionTest.class)) .withConfiguration(AutoConfigurations.of(PolarisConfigAutoConfiguration.class)) + .withAllowBeanDefinitionOverriding(true) .withPropertyValues("spring.application.name=" + "conditionalOnConfigReflectEnabledTest") .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081") .withPropertyValues("spring.cloud.polaris.config.refresh-type=" + RefreshType.REFLECT) diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfigurationTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfigurationTest.java index 93c7086fb..9bce63538 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfigurationTest.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfigurationTest.java @@ -24,11 +24,15 @@ import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; import static com.tencent.polaris.test.common.Consts.PORT; import static com.tencent.polaris.test.common.Consts.SERVICE_PROVIDER; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.fail; /** * Test for {@link PolarisLoadBalancerAutoConfiguration}. @@ -38,24 +42,37 @@ import static org.assertj.core.api.Assertions.assertThat; public class PolarisLoadBalancerAutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withPropertyValues("spring.application.name=" + SERVICE_PROVIDER) + .withPropertyValues("server.port=" + PORT) + .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081") + .withPropertyValues("spring.cloud.polaris.loadbalancer.strategy=polarisWeighted") .withConfiguration(AutoConfigurations.of( PolarisRibbonTest.class, PolarisLoadBalancerAutoConfiguration.class, - PolarisContextAutoConfiguration.class)) - .withPropertyValues("spring.application.name=" + SERVICE_PROVIDER) - .withPropertyValues("server.port=" + PORT) - .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081"); + PolarisContextAutoConfiguration.class)); @Test public void testDefaultInitialization() { this.contextRunner.run(context -> { assertThat(context).hasSingleBean(RouterAPI.class); + assertThat(context).hasSingleBean(RestTemplate.class); + try { + context.getBean(RestTemplate.class).getForEntity("http://wrong.url", String.class); + fail(); + } + catch (Exception e) { + // do nothing + } }); } @Configuration @EnableAutoConfiguration static class PolarisRibbonTest { - + @Bean + @LoadBalanced + public RestTemplate restTemplate() { + return new RestTemplate(); + } } }