我有一个问题,Spring和开放的,我想你可以帮助我。
我有一个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);
}
}
我有一个自定义的伪装配置类:
@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。
你有什么想法吗?
先谢谢你
3条答案
按热度按时间yqlxgs2m1#
以下几点可能会有所帮助:
首先:为什么要使用限定符将
LegacyClient
bean注入到服务中?有很多吗?一般来说,接口应该 Package 到代理中,并作为单个bean放入应用程序上下文中,因此在我的理解中,这里不需要限定符。另一个问题是:
看起来
@FeignClient
注解未被处理。因此未创建代理。为了检查这一点,请在配置FeignConfig
some of beans / create no-op构造函数中放置断点,并检查它是否被调用(或者可能放置日志消息以查看它是否正常工作)。您还没有发布软件包结构,但可能是软件包扫描机制没有找到此配置,因此没有创建。
ocebsuys2#
首先谢谢你回信。
我回答了你的第一个问题,是的,这只是一个习惯。我可以消除它,没有问题。没有更多的Bean占用相同的接口。这不是一个问题。
对于你的第二条评论,你是完全正确的。
在FeignConfig配置类中添加一个构建器,添加一个日志和一个断点,不要停在那里。
附带一个SS随包结构,看看能不能帮我检测出我的问题。
project package structure
非常感谢你提前。
d4so4syb3#