随笔 - 22, 文章 - 0, 评论 - 97, 阅读 - 58813
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

今天手上的SpringCloud 项目做开发测试,多个FeigenClient报错,错误标题是(截取了部分):

defined in null, could not be registered. A bean with that name has already

找了下资料,在以下两篇文章中找到需要的东西:

https://blog.csdn.net/neosmith/article/details/82349449

http://www.flydean.com/spring-cloud-openfeign-demo/

第二篇讲的更详细,但是在我按照文章中的代码改写代码时,还是无法正确生成bean。于是我改下了下,我用的spring cloud 版本是Greenwich.SR3

原来的代码如下:

复制代码
 1 /**
 2  * 因为@FeignClient的value不能重复,所以需要在这里以自定义的方式来创建
 3  * @author wayne
 4  * @version FeignClientController,  2019/9/5 7:07 下午
 5  */
 6 @Data
 7 @Component
 8 @Import(FeignClientsConfiguration.class)
 9 public class FeignClientController {
10 
11     private OrderClient orderClient;
12     private UserClient userClient;
13 
14     public FeignClientController(Decoder decoder, Encoder encoder, Client client, Contract contract) {
15         this.orderClient = Feign.builder().client(client)
16                 .encoder(encoder)
17                 .decoder(decoder)
18                 .contract(contract)
19                 //默认是Logger.NoOpLogger
20                 .logger(new Slf4jLogger(OrderClient.class))
21                 //默认是Logger.Level.NONE
22                 .logLevel(Logger.Level.FULL)
23                 .target(OrderClient.class, "http://openfeign-server");
24 
25         this.userClient = Feign.builder().client(client)
26                 .encoder(encoder)
27                 .decoder(decoder)
28                 .contract(contract)
29                 //默认是Logger.NoOpLogger
30                 .logger(new Slf4jLogger(UserClient.class))
31                 //默认是Logger.Level.NONE
32                 .logLevel(Logger.Level.FULL)
33                 .target(UserClient.class, "http://openfeign-server");
34     }
35 }
复制代码

将client声明为bean,才能在我这个版本里解决文章头部的错误信息。

改写后代码(原示例代码上改):

复制代码
package com.flydean.client;

import feign.Client;
import feign.Contract;
import feign.Feign;
import feign.Logger;
import feign.codec.Decoder;
import feign.codec.Encoder;
import feign.slf4j.Slf4jLogger;
import org.springframework.cloud.openfeign.FeignClientsConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;

@Component
@Import(FeignClientsConfiguration.class)
public class FeignClientController {

    private OrderClient orderClient;
    private UserClient userClient;

    private Decoder decoder;
    private Encoder encoder;
    private Client client;
    private Contract contract;

    public FeignClientController(Decoder decoder, Encoder encoder, Client client, Contract contract) {

        this.decoder = decoder;
        this.encoder = encoder;
        this.client = client;
        this.contract = contract;

        String serverName = "http://openfeign-server";
        this.orderClient = initClient(OrderClient.class, serverName);

        this.userClient = initClient(UserClient.class, serverName);
    }

    private <T> T initClient(Class<T> clazz, String serverName) {
        return Feign.builder().client(client)
                .encoder(encoder)
                .decoder(decoder)
                .contract(contract)
                //默认是Logger.NoOpLogger
                .logger(new Slf4jLogger(clazz))
                //默认是Logger.Level.NONE
                .logLevel(Logger.Level.FULL)
                .target(clazz, serverName);
    }

    @Bean
    public OrderClient initOrderClient() {
        return orderClient;
    }

    @Bean
    public UserClient initUserClient() {
        return userClient;
    }
}
复制代码

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示