![](/img/trans.png)
[英]Spring Field required a bean of type that could not be found Spring JPA
[英]Openfeign + Spring cloud : Field required a bean of type that could not be found
我对 spring 和 openfeign 有问题,我认为你可以帮助我。
我有一个pom文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>xx.yyy</groupId>
<artifactId>component</artifactId>
<version>1.0.0</version>
<name>component</name>
<properties>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<pact.version>3.6.7</pact.version>
<spring-cloud.version>Greenwich.SR4</spring-cloud.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.10.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
......
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
......
我在主类中声明了以下配置:
@SpringBootApplication(scanBasePackages = {"xx.yyy", "xx.yyy.rest.client"}, exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@EnableAsync
@Import({P2OrchestratorApplicationConfig.class})
public class P2OrchestratorApplication {
public static void main(String[] args) {
SpringApplication.run(P2OrchestratorApplication.class, args);
}
}
我有一个自定义的 feign 配置类:
@Configuration
@EnableFeignClients()
@ImportAutoConfiguration({FeignAutoConfiguration.class})
public class FeignConfig {
@Bean
public OkHttpClient client() {
return new OkHttpClient();
}
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
}
我有一个开放的假客户端如下:
@FeignClient(name="legacyClient", value = "legacyClient", url = "${uri.microservice.legacy}", configuration = FeignConfig.class)
public interface LegacyClient {
@PatchMapping(value = "/legacy/xxx/cleanLine/{authorizationCode}", produces = { MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<Boolean> cleanLine(@PathVariable("authorizationCode") Long authorizationCode, @RequestParam(required = true) Long lineNumber);
}
最后一个组件,我需要使用这个客户端:
@Log4j
@Component("p2ProcessAlgorithm")
public class P2ProcessAlgorithm {
@Autowired
@Qualifier("legacyClient")
private LegacyClient legacyClient;
public final void process(){
Long authorizationCode = 123L;
Long lineNumber = 1L;
Boolean isClean= this.legacClient.cleanLine(authorizationCode, lineNumber);
......
}
但是应用程序给了我下一条消息:
***************************
APPLICATION FAILED TO START
***************************
Description:
Field legacyClient in xxx.yyy.p2.structure.P2ProcessAlgorithm required a bean of type 'xxx.yyy.rest.client.LegacyClient' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
- @org.springframework.beans.factory.annotation.Qualifier(value=p2AsyncOrchestratorService)
Action:
Consider defining a bean of type 'xxx.yyy.rest.client.LegacyClient' in your configuration.
我已经尝试了几种配置,但我无法让 openfeign 客户端成为 P2ProcessAlgorithm 类中公认的 bean。
你有什么主意吗?
提前致谢
可能有帮助的几点:
首先:为什么要使用限定符将LegacyClient
bean 注入到您的服务中? 有很多吗? 一般来说,接口应该被包装到代理中并作为单个 bean 放入应用程序上下文中,所以在我的理解中,这里不需要限定符。
另一个担忧:
看起来@FeignClient
注释没有被处理。 因此不会创建代理。 为了检查这一点,在配置FeignConfig
一些 bean 中放置一个断点/创建一个无操作构造函数并检查它是否被调用(或者可能放置日志消息只是为了看看它是否有效)。
您尚未发布包结构,但包扫描机制可能找不到此配置,因此未创建。
首先感谢您的回复。
我回答了你的第一个问题,是的,这只是一种习惯。 我可以毫无问题地消除它。 没有更多的 Bean 占用相同的接口。 这不是问题。
回应你的第二条评论,你是绝对正确的。
在 FeignConfig 配置类中添加一个构建器。 添加日志和断点,不要停在那里。
附上ss与包结构,看看能不能帮我检测一下我的问题。
非常感谢您提前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.