FeginClient命名重复导致扫描被覆盖的问题

主要是FeginClient命名重复导致扫描被覆盖的问题,当springboot配置文件中有以下配置时,会允许bean配置覆盖

spring: 
  main:
    allow-bean-definition-overriding: true

再举个例子:
ACL服务中,最早期为了节约部署成本,将ACL服务/DIC服务/oss服务混写到了一起,导致以下配置中的name最终是一样的。

@FeignClient(name ="${custom.service.dic}", fallback= DICAppApiHystrix.class, configuration= DICApiConfiguration.class)

而如果没有上述覆盖的配置,则启动时会报错。最后选择了覆盖配置的方式进行的启动,带来的代价是:同一个服务发布feginclient时,为了避免configuration覆盖,要写在同一个文件中。

结论:
1、后续找时间把服务完全拆开,保持服务职责单一
2、将allow-bean-definition-overriding配置改回默认设置
3、feginClient配置覆盖调试路径:org.springframework.cloud.openfeign.FeignAutoConfiguration#configurations

JavaSpring Cloud 生态中,Feign 客户端(Feign Client)是一种声明式的 Web 服务客户端,用于简化服务间通信。它与 Mapper 的关系通常出现在使用 MyBatis 等持久层框架时,Mapper 用于数据库操作,而 Feign Client 用于远程服务调用。 尽管 Feign Client 和 Mapper 通常属于不同的职责范围,但在实际开发中可以结合使用,例如在服务调用后将返回的数据通过 Mapper 映射到实体类中。 ### Feign Client 基本使用 Feign Client 通过注解定义远程服务接口,例如: ```java @FeignClient(name = "service-provider") public interface ServiceClient { @GetMapping("/data") String getData(); } ``` ### Mapper 的使用 Mapper 通常用于将数据库结果映射为 Java 对象,例如使用 MyBatis: ```java @Mapper public interface DataMapper { @Select("SELECT * FROM data_table WHERE id = #{id}") Data getDataById(Long id); } ``` ### Feign Client 与 Mapper 的结合 在某些场景中,Feign Client 获取的数据可能需要通过 Mapper 进行转换或持久化处理。例如: ```java @Service public class DataProcessingService { private final ServiceClient serviceClient; private final DataMapper dataMapper; public DataProcessingService(ServiceClient serviceClient, DataMapper dataMapper) { this.serviceClient = serviceClient; this.dataMapper = dataMapper; } public Data fetchAndMapData() { String rawData = serviceClient.getData(); // 假设 rawData 是 JSON 格式,可以通过反序列化或 Mapper 转换为 Data 对象 return dataMapper.mapFromJson(rawData); // 自定义映射方法 } } ``` ### 自定义 Mapper 方法 如果需要在 Mapper 中处理 Feign Client 返回的数据,可以在接口中定义自定义映射方法: ```java @Mapper public interface DataMapper { @Select("SELECT * FROM data_table WHERE id = #{id}") Data getDataById(Long id); @Results(id = "dataMap", value = { @Result(property = "id", column = "id"), @Result(property = "name", column = "name") }) Data mapFromJson(@Param("json") String json); } ``` ### 配置与启用 Feign Client 在 Spring Boot 应用中,需启用 Feign Clients: ```java @SpringBootApplication @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` ### Feign Client 的配置属性 可以配置 Feign 的行为,例如日志级别、解码器等: ```yaml feign: client: config: default: logger-level: full decoder: feign.jackson.JacksonDecoder ``` 这些配置可以定义在 `application.yml` 或通过 Java 配置类进行设置。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值