Skip to content

Commit 8964965

Browse files
fix:fix switch not working bug in 2022 & 2023 plugin. (#202)
1 parent 7de440f commit 8964965

File tree

19 files changed

+828
-815
lines changed

19 files changed

+828
-815
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,105 +1,99 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<project xmlns="http://maven.apache.org/POM/4.0.0"
3-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5-
<parent>
6-
<groupId>org.springframework.boot</groupId>
7-
<artifactId>spring-boot-starter-parent</artifactId>
8-
<version>3.1.8</version>
9-
<relativePath/>
10-
</parent>
11-
<modelVersion>4.0.0</modelVersion>
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<groupId>org.springframework.boot</groupId>
7+
<artifactId>spring-boot-starter-parent</artifactId>
8+
<version>3.1.8</version>
9+
<relativePath/>
10+
</parent>
11+
<modelVersion>4.0.0</modelVersion>
1212

13-
<groupId>com.tencent.polaris</groupId>
14-
<artifactId>polaris-javaagent-demo-sc-quickstart-2022-consumer</artifactId>
15-
<packaging>jar</packaging>
16-
<version>1.7.0</version>
13+
<groupId>com.tencent.polaris</groupId>
14+
<artifactId>polaris-javaagent-demo-sc-quickstart-2022-consumer</artifactId>
15+
<packaging>jar</packaging>
16+
<version>1.7.0</version>
1717

18-
<name>2022-consumer</name>
19-
<description>Demo Consumer Project For Spring Cloud Alibaba</description>
18+
<name>2022-consumer</name>
19+
<description>Demo Consumer Project For Spring Cloud Alibaba</description>
2020

21-
<dependencyManagement>
22-
<dependencies>
23-
<dependency>
24-
<groupId>com.alibaba.cloud</groupId>
25-
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
26-
<version>2022.0.0.0</version>
27-
<type>pom</type>
28-
<scope>import</scope>
29-
</dependency>
21+
<dependencyManagement>
22+
<dependencies>
23+
<dependency>
24+
<groupId>com.alibaba.cloud</groupId>
25+
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
26+
<version>2022.0.0.0</version>
27+
<type>pom</type>
28+
<scope>import</scope>
29+
</dependency>
3030

31-
<dependency>
32-
<groupId>org.springframework.cloud</groupId>
33-
<artifactId>spring-cloud-dependencies</artifactId>
34-
<version>2022.0.5</version>
35-
<type>pom</type>
36-
<scope>import</scope>
37-
</dependency>
38-
</dependencies>
39-
</dependencyManagement>
31+
<dependency>
32+
<groupId>org.springframework.cloud</groupId>
33+
<artifactId>spring-cloud-dependencies</artifactId>
34+
<version>2022.0.5</version>
35+
<type>pom</type>
36+
<scope>import</scope>
37+
</dependency>
38+
</dependencies>
39+
</dependencyManagement>
4040

41-
<dependencies>
42-
<!-- 简单的 Spring Cloud Web 依赖 -->
43-
<dependency>
44-
<groupId>org.springframework.cloud</groupId>
45-
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
46-
</dependency>
47-
<dependency>
48-
<groupId>org.springframework.cloud</groupId>
49-
<artifactId>spring-cloud-starter-bootstrap</artifactId>
50-
</dependency>
51-
<dependency>
52-
<groupId>org.springframework.boot</groupId>
53-
<artifactId>spring-boot-starter-web</artifactId>
54-
</dependency>
55-
<dependency>
56-
<groupId>org.springframework.cloud</groupId>
57-
<artifactId>spring-cloud-starter-openfeign</artifactId>
58-
</dependency>
41+
<dependencies>
42+
<!-- 简单的 Spring Cloud Web 依赖 -->
43+
<dependency>
44+
<groupId>org.springframework.cloud</groupId>
45+
<artifactId>spring-cloud-starter-bootstrap</artifactId>
46+
</dependency>
47+
<dependency>
48+
<groupId>org.springframework.boot</groupId>
49+
<artifactId>spring-boot-starter-web</artifactId>
50+
</dependency>
51+
<dependency>
52+
<groupId>org.springframework.cloud</groupId>
53+
<artifactId>spring-cloud-starter-openfeign</artifactId>
54+
</dependency>
5955

60-
<dependency>
61-
<groupId>org.springframework.boot</groupId>
62-
<artifactId>spring-boot-starter-webflux</artifactId>
63-
</dependency>
56+
<dependency>
57+
<groupId>org.springframework.boot</groupId>
58+
<artifactId>spring-boot-starter-webflux</artifactId>
59+
</dependency>
6460

65-
<!-- 引入 Spring Cloud Alibaba 的服务注册发现依赖 -->
66-
<dependency>
67-
<groupId>com.alibaba.cloud</groupId>
68-
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
69-
</dependency>
61+
<!-- 引入 Spring Cloud Alibaba 的服务注册发现依赖 -->
62+
<dependency>
63+
<groupId>com.alibaba.cloud</groupId>
64+
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
65+
</dependency>
7066

71-
<dependency>
72-
<groupId>org.springframework.cloud</groupId>
73-
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
74-
</dependency>
67+
<dependency>
68+
<groupId>org.springframework.cloud</groupId>
69+
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
70+
</dependency>
7571

76-
<dependency>
77-
<groupId>org.springframework.boot</groupId>
78-
<artifactId>spring-boot-starter-actuator</artifactId>
79-
</dependency>
72+
<dependency>
73+
<groupId>org.springframework.boot</groupId>
74+
<artifactId>spring-boot-starter-actuator</artifactId>
75+
</dependency>
8076

8177

78+
</dependencies>
8279

83-
84-
</dependencies>
85-
86-
<build>
87-
<plugins>
88-
<plugin>
89-
<groupId>org.springframework.boot</groupId>
90-
<artifactId>spring-boot-maven-plugin</artifactId>
91-
<configuration>
92-
<executable>true</executable>
93-
</configuration>
94-
<executions>
95-
<execution>
96-
<goals>
97-
<goal>repackage</goal>
98-
</goals>
99-
</execution>
100-
</executions>
101-
</plugin>
102-
</plugins>
103-
</build>
80+
<build>
81+
<plugins>
82+
<plugin>
83+
<groupId>org.springframework.boot</groupId>
84+
<artifactId>spring-boot-maven-plugin</artifactId>
85+
<configuration>
86+
<executable>true</executable>
87+
</configuration>
88+
<executions>
89+
<execution>
90+
<goals>
91+
<goal>repackage</goal>
92+
</goals>
93+
</execution>
94+
</executions>
95+
</plugin>
96+
</plugins>
97+
</build>
10498

10599
</project>

polaris-agent-examples/spring-cloud-plugins-examples/spring-cloud-2023-examples/quickstart-examples/provider/src/main/resources/bootstrap.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
server.port=65001
2-
spring.application.name=service-provider-2022
2+
spring.application.name=service-provider-2023
33
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
44
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
55
spring.cloud.nacos.config.enabled=true

polaris-agent-plugins/spring-cloud-plugins/spring-cloud-2022-plugin/src/main/java/cn/polarismesh/agent/plugin/spring/cloud/inject/CircuitBreakerBeanInjector.java

Lines changed: 72 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.slf4j.LoggerFactory;
1212
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
1313
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
14-
//import org.springframework.cloud.openfeign.PolarisFeignCircuitBreakerTargeterAutoConfiguration;
1514
import org.springframework.core.env.Environment;
1615

1716
import java.lang.reflect.Constructor;
@@ -20,27 +19,81 @@
2019

2120
public class CircuitBreakerBeanInjector implements BeanInjector {
2221

23-
private static final Logger LOGGER = LoggerFactory.getLogger(CircuitBreakerBeanInjector.class);
22+
private static final Logger LOGGER = LoggerFactory.getLogger(CircuitBreakerBeanInjector.class);
2423

25-
private final AtomicBoolean bootstrapLoaded = new AtomicBoolean(false);
24+
private final AtomicBoolean bootstrapLoaded = new AtomicBoolean(false);
2625

27-
@Override
28-
public String getModule() {
29-
return "spring-cloud-starter-tencent-polaris-circuitbreaker";
30-
}
26+
@Override
27+
public String getModule() {
28+
return "spring-cloud-starter-tencent-polaris-circuitbreaker";
29+
}
3130

32-
@Override
33-
public void onBootstrapStartup(Object configurationParser, Constructor<?> configClassCreator, Method processConfigurationClass, BeanDefinitionRegistry registry, Environment environment) {
34-
LOGGER.info("[PolarisJavaAgent] success to inject bootstrap bean definitions for module {}", getModule());
35-
}
31+
@Override
32+
public void onBootstrapStartup(Object configurationParser, Constructor<?> configClassCreator, Method processConfigurationClass, BeanDefinitionRegistry registry, Environment environment) {
33+
if (!(Utils.checkPolarisEnabled(environment) && Utils.checkKeyEnabled(environment, "spring.cloud.polaris.circuitbreaker.enabled"))) {
34+
LOGGER.warn("[PolarisJavaAgent] polaris circuitbreaker not enabled, skip inject bootstrap bean definitions for module {}", getModule());
35+
return;
36+
}
37+
bootstrapLoaded.set(true);
38+
Object polarisCircuitBreakerBootstrapConfiguration = ReflectionUtils.invokeConstructor(configClassCreator, PolarisCircuitBreakerBootstrapConfiguration.class, "polarisCircuitBreakerBootstrapConfiguration");
39+
ReflectionUtils.invokeMethod(processConfigurationClass, configurationParser, polarisCircuitBreakerBootstrapConfiguration, Constant.DEFAULT_EXCLUSION_FILTER);
40+
registry.registerBeanDefinition("polarisCircuitBreakerBootstrapConfiguration", BeanDefinitionBuilder.genericBeanDefinition(
41+
PolarisCircuitBreakerBootstrapConfiguration.class).getBeanDefinition());
42+
Object polarisCircuitBreakerAutoConfiguration = ReflectionUtils.invokeConstructor(configClassCreator, PolarisCircuitBreakerAutoConfiguration.class, "polarisCircuitBreakerAutoConfiguration");
43+
ReflectionUtils.invokeMethod(processConfigurationClass, configurationParser, polarisCircuitBreakerAutoConfiguration, Constant.DEFAULT_EXCLUSION_FILTER);
44+
registry.registerBeanDefinition("polarisCircuitBreakerAutoConfiguration", BeanDefinitionBuilder.genericBeanDefinition(
45+
PolarisCircuitBreakerAutoConfiguration.class).getBeanDefinition());
46+
if (null != ClassUtils.getClazz("reactor.core.publisher.Mono", Thread.currentThread().getContextClassLoader())
47+
&& null != ClassUtils.getClazz("reactor.core.publisher.Flux", Thread.currentThread()
48+
.getContextClassLoader())) {
49+
Object reactivePolarisCircuitBreakerAutoConfiguration = ReflectionUtils.invokeConstructor(configClassCreator, ReactivePolarisCircuitBreakerAutoConfiguration.class, "reactivePolarisCircuitBreakerAutoConfiguration");
50+
ReflectionUtils.invokeMethod(processConfigurationClass, configurationParser, reactivePolarisCircuitBreakerAutoConfiguration, Constant.DEFAULT_EXCLUSION_FILTER);
51+
registry.registerBeanDefinition("reactivePolarisCircuitBreakerAutoConfiguration", BeanDefinitionBuilder.genericBeanDefinition(
52+
ReactivePolarisCircuitBreakerAutoConfiguration.class).getBeanDefinition());
53+
}
54+
if (null != ClassUtils.getClazz("feign.Feign", Thread.currentThread().getContextClassLoader())
55+
&& null != ClassUtils.getClazz("org.springframework.cloud.openfeign.FeignClientFactoryBean", Thread.currentThread()
56+
.getContextClassLoader())) {
57+
Object polarisCircuitBreakerFeignClientAutoConfiguration = ReflectionUtils.invokeConstructor(configClassCreator, PolarisCircuitBreakerFeignClientAutoConfiguration.class, "polarisCircuitBreakerFeignClientAutoConfiguration");
58+
ReflectionUtils.invokeMethod(processConfigurationClass, configurationParser, polarisCircuitBreakerFeignClientAutoConfiguration, Constant.DEFAULT_EXCLUSION_FILTER);
59+
registry.registerBeanDefinition("polarisCircuitBreakerFeignClientAutoConfiguration", BeanDefinitionBuilder.genericBeanDefinition(
60+
PolarisCircuitBreakerFeignClientAutoConfiguration.class).getBeanDefinition());
61+
}
62+
if (null != ClassUtils.getClazz("org.springframework.web.reactive.DispatcherHandler", Thread.currentThread()
63+
.getContextClassLoader())
64+
&& null != ClassUtils.getClazz("com.tencent.cloud.polaris.circuitbreaker.config.ReactivePolarisCircuitBreakerAutoConfiguration", Thread.currentThread()
65+
.getContextClassLoader())
66+
&& null != ClassUtils.getClazz("org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreakerFactory", Thread.currentThread()
67+
.getContextClassLoader())
68+
&& null != ClassUtils.getClazz("com.tencent.cloud.polaris.circuitbreaker.ReactivePolarisCircuitBreakerFactory", Thread.currentThread()
69+
.getContextClassLoader())
70+
&& null != ClassUtils.getClazz("org.springframework.cloud.gateway.config.GatewayAutoConfiguration", Thread.currentThread()
71+
.getContextClassLoader())) {
72+
String property = environment.getProperty("spring.cloud.gateway.enabled");
73+
if (Boolean.parseBoolean(property)) {
74+
Object gatewayPolarisCircuitBreakerAutoConfiguration = ReflectionUtils.invokeConstructor(configClassCreator, GatewayPolarisCircuitBreakerAutoConfiguration.class, "gatewayPolarisCircuitBreakerAutoConfiguration");
75+
ReflectionUtils.invokeMethod(processConfigurationClass, configurationParser, gatewayPolarisCircuitBreakerAutoConfiguration, Constant.DEFAULT_EXCLUSION_FILTER);
76+
registry.registerBeanDefinition("gatewayPolarisCircuitBreakerAutoConfiguration", BeanDefinitionBuilder.genericBeanDefinition(
77+
GatewayPolarisCircuitBreakerAutoConfiguration.class).getBeanDefinition());
78+
}
79+
}
80+
Object polarisCircuitBreakerEndpointAutoConfiguration = ReflectionUtils.invokeConstructor(configClassCreator, PolarisCircuitBreakerEndpointAutoConfiguration.class, "polarisCircuitBreakerEndpointAutoConfiguration");
81+
ReflectionUtils.invokeMethod(processConfigurationClass, configurationParser, polarisCircuitBreakerEndpointAutoConfiguration, Constant.DEFAULT_EXCLUSION_FILTER);
82+
registry.registerBeanDefinition("polarisCircuitBreakerEndpointAutoConfiguration", BeanDefinitionBuilder.genericBeanDefinition(
83+
PolarisCircuitBreakerEndpointAutoConfiguration.class).getBeanDefinition());
84+
LOGGER.info("[PolarisJavaAgent] success to inject bootstrap bean definitions for module {}", getModule());
85+
}
3686

37-
@Override
38-
public void onApplicationStartup(Object configurationParser, Constructor<?> configClassCreator, Method processConfigurationClass, BeanDefinitionRegistry registry, Environment environment) {
39-
Object polarisCircuitBreakerEndpointAutoConfiguration = ReflectionUtils.invokeConstructor(configClassCreator, PolarisCircuitBreakerEndpointAutoConfiguration.class, "polarisCircuitBreakerEndpointAutoConfiguration");
40-
ReflectionUtils.invokeMethod(processConfigurationClass, configurationParser, polarisCircuitBreakerEndpointAutoConfiguration, Constant.DEFAULT_EXCLUSION_FILTER);
41-
registry.registerBeanDefinition("polarisCircuitBreakerEndpointAutoConfiguration", BeanDefinitionBuilder.genericBeanDefinition(
42-
PolarisCircuitBreakerEndpointAutoConfiguration.class).getBeanDefinition());
43-
LOGGER.info("[PolarisJavaAgent] success to inject application bean definitions for module {}", getModule());
44-
}
87+
@Override
88+
public void onApplicationStartup(Object configurationParser, Constructor<?> configClassCreator, Method processConfigurationClass, BeanDefinitionRegistry registry, Environment environment) {
89+
if (!(Utils.checkPolarisEnabled(environment) && Utils.checkKeyEnabled(environment, "spring.cloud.polaris.circuitbreaker.enabled"))) {
90+
LOGGER.warn("[PolarisJavaAgent] polaris not enabled, skip inject application bean definitions for module {}", getModule());
91+
return;
92+
}
93+
if (!bootstrapLoaded.get()) {
94+
onBootstrapStartup(configurationParser, configClassCreator, processConfigurationClass, registry, environment);
95+
}
96+
LOGGER.info("[PolarisJavaAgent] success to inject application bean definitions for module {}", getModule());
97+
}
4598
}
4699

polaris-agent-plugins/spring-cloud-plugins/spring-cloud-2022-plugin/src/main/java/cn/polarismesh/agent/plugin/spring/cloud/inject/LoadbalancerBeanInjector.java

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,38 +17,39 @@
1717

1818
package cn.polarismesh.agent.plugin.spring.cloud.inject;
1919

20-
import java.lang.reflect.Constructor;
21-
import java.lang.reflect.Method;
22-
import java.util.Map;
23-
2420
import cn.polarismesh.agent.core.common.utils.ReflectionUtils;
2521
import cn.polarismesh.agent.plugin.spring.cloud.common.BeanInjector;
2622
import cn.polarismesh.agent.plugin.spring.cloud.common.Constant;
2723
import cn.polarismesh.agent.plugin.spring.cloud.common.Utils;
2824
import com.tencent.cloud.polaris.loadbalancer.PolarisLoadBalancerAutoConfiguration;
29-
import org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration;
3025
import org.slf4j.Logger;
3126
import org.slf4j.LoggerFactory;
32-
3327
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
3428
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
3529
import org.springframework.core.env.Environment;
36-
import org.springframework.core.io.ClassPathResource;
30+
31+
import java.lang.reflect.Constructor;
32+
import java.lang.reflect.Method;
3733

3834
public class LoadbalancerBeanInjector implements BeanInjector {
3935

40-
private static final Logger LOGGER = LoggerFactory.getLogger(LoadbalancerBeanInjector.class);
41-
@Override
42-
public String getModule() {
43-
return "spring-cloud-tencent-polaris-loadbalancer";
44-
}
36+
private static final Logger LOGGER = LoggerFactory.getLogger(LoadbalancerBeanInjector.class);
37+
38+
@Override
39+
public String getModule() {
40+
return "spring-cloud-tencent-polaris-loadbalancer";
41+
}
4542

46-
@Override
47-
public void onApplicationStartup(Object configurationParser, Constructor<?> configClassCreator, Method processConfigurationClass, BeanDefinitionRegistry registry, Environment environment) {
48-
Object polarisLoadBalancerAutoConfiguration = ReflectionUtils.invokeConstructor(configClassCreator, PolarisLoadBalancerAutoConfiguration.class, "polarisLoadBalancerAutoConfiguration");
49-
ReflectionUtils.invokeMethod(processConfigurationClass, configurationParser, polarisLoadBalancerAutoConfiguration, Constant.DEFAULT_EXCLUSION_FILTER);
50-
registry.registerBeanDefinition("polarisLoadBalancerAutoConfiguration", BeanDefinitionBuilder.genericBeanDefinition(
51-
PolarisLoadBalancerAutoConfiguration.class).getBeanDefinition());
52-
LOGGER.info("[PolarisJavaAgent] success to inject application bean definitions for module {}", getModule());
53-
}
43+
@Override
44+
public void onApplicationStartup(Object configurationParser, Constructor<?> configClassCreator, Method processConfigurationClass, BeanDefinitionRegistry registry, Environment environment) {
45+
if (!(Utils.checkPolarisEnabled(environment) && Utils.checkKeyEnabled(environment, "spring.cloud.polaris.loadbalancer.enabled"))) {
46+
LOGGER.warn("[PolarisJavaAgent] polaris loadbalancer not enabled, skip inject application bean definitions for module {}", getModule());
47+
return;
48+
}
49+
Object polarisLoadBalancerAutoConfiguration = ReflectionUtils.invokeConstructor(configClassCreator, PolarisLoadBalancerAutoConfiguration.class, "polarisLoadBalancerAutoConfiguration");
50+
ReflectionUtils.invokeMethod(processConfigurationClass, configurationParser, polarisLoadBalancerAutoConfiguration, Constant.DEFAULT_EXCLUSION_FILTER);
51+
registry.registerBeanDefinition("polarisLoadBalancerAutoConfiguration", BeanDefinitionBuilder.genericBeanDefinition(
52+
PolarisLoadBalancerAutoConfiguration.class).getBeanDefinition());
53+
LOGGER.info("[PolarisJavaAgent] success to inject application bean definitions for module {}", getModule());
54+
}
5455
}

0 commit comments

Comments
 (0)