Skip to content

Commit c381e44

Browse files
committed
fix(springboot openfeign): fix IT failed for tests that have two dapr client bean autowired
Job SDK ITs have a daprPreviewClient bean defined, as SpringBoot bean search will first get beans that impl the interface and get all beans that matches the bean's class, when openfeign autowire DaprClient, there is a conflict between daprClient and daprPreviewClient. Change the AutoConfiguration behavior to make a more strict rule for making AutoConfiguration run Signed-off-by: lony2003 <[email protected]>
1 parent a330ef2 commit c381e44

File tree

7 files changed

+39
-18
lines changed

7 files changed

+39
-18
lines changed

dapr-spring/dapr-spring-openfeign/pom.xml

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<maven.compiler.source>17</maven.compiler.source>
1919
<maven.compiler.target>17</maven.compiler.target>
2020
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21+
<spotbugs.exclude.filter.file>./spotbugs-exclude.xml</spotbugs.exclude.filter.file>
2122
</properties>
2223

2324
<dependencies>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<FindBugsFilter>
2+
<Match>
3+
<Package name="~io\.dapr\.spring.*"/>
4+
<Bug pattern="EI_EXPOSE_REP"/>
5+
</Match>
6+
7+
<Match>
8+
<Package name="~io\.dapr\.spring.*"/>
9+
<Bug pattern="EI_EXPOSE_REP2"/>
10+
</Match>
11+
12+
<Match>
13+
<Package name="~io\.dapr\.spring\.openfeign\.autoconfigure.*"/>
14+
<Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE"/>
15+
</Match>
16+
</FindBugsFilter>

dapr-spring/dapr-spring-openfeign/src/main/java/io/dapr/spring/openfeign/autoconfigure/DaprFeignClientAutoConfiguration.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@
2222
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2323
import org.springframework.cloud.openfeign.FeignAutoConfiguration;
2424
import org.springframework.context.annotation.Bean;
25+
import org.springframework.context.annotation.Conditional;
2526
import org.springframework.context.annotation.Configuration;
2627
import org.springframework.context.annotation.Import;
2728

2829
@Configuration(proxyBeanMethods = false)
2930
@EnableConfigurationProperties(DaprFeignClientProperties.class)
30-
@ConditionalOnProperty(name = "dapr.feign.enabled", matchIfMissing = true)
31+
@Conditional(FeignClientAnnoationEnabledCondition.class)
3132
@ConditionalOnClass(FeignAutoConfiguration.class)
3233
@Import(DaprClientTargeterBeanPostProcessor.class)
3334
public class DaprFeignClientAutoConfiguration {

dapr-spring/dapr-spring-openfeign/src/main/java/io/dapr/spring/openfeign/autoconfigure/DaprFeignClientProperties.java

-9
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,9 @@ public class DaprFeignClientProperties {
2121

2222
public static final String PROPERTY_PREFIX = "dapr.feign";
2323

24-
private boolean enabled = true;
2524
private Integer timeout = 2000;
2625
private Integer retries = 3;
2726

28-
public boolean isEnabled() {
29-
return enabled;
30-
}
31-
32-
public void setEnabled(boolean enabled) {
33-
this.enabled = enabled;
34-
}
35-
3627
public Integer getTimeout() {
3728
return timeout;
3829
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.dapr.spring.openfeign.autoconfigure;
2+
3+
import org.jetbrains.annotations.NotNull;
4+
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
5+
import org.springframework.cloud.openfeign.EnableFeignClients;
6+
import org.springframework.context.annotation.Condition;
7+
import org.springframework.context.annotation.ConditionContext;
8+
import org.springframework.core.type.AnnotatedTypeMetadata;
9+
10+
public class FeignClientAnnoationEnabledCondition implements Condition {
11+
@Override
12+
public boolean matches(@NotNull ConditionContext context, @NotNull AnnotatedTypeMetadata metadata) {
13+
if (context.getBeanFactory() == null) {
14+
return false; // Return false if context or BeanFactory is null
15+
}
16+
17+
String[] beanNames = context.getBeanFactory().getBeanNamesForAnnotation(EnableFeignClients.class);
18+
return beanNames != null && beanNames.length > 0; // Check for null and non-empty array
19+
}
20+
}

dapr-spring/dapr-spring-openfeign/src/main/resources/META-INF/additional-spring-configuration-metadata.json

-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
{
22
"properties": [
3-
{
4-
"name": "dapr.feign.enabled",
5-
"type": "java.lang.Boolean",
6-
"defaultValue": true,
7-
"sourceType": "io.dapr.spring.openfeign.autoconfigure.DaprFeignClientProperties",
8-
"description": "enable dapr openfeign or not."
9-
},
103
{
114
"name": "dapr.feign.timeout",
125
"type": "java.lang.Integer",

sdk-tests/src/test/java/io/dapr/it/spring/feign/DaprFeignIT.java

-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
DaprFeignTestApplication.class
4242
},
4343
properties = {
44-
"dapr.feign.enabled=true",
4544
"dapr.feign.retries=1",
4645
"server.port=" + DaprFeignIT.APP_PORT
4746
}

0 commit comments

Comments
 (0)