spring cloud 实现覆盖fegin的默认配置,以及配置fegin的log

Feign的默认配置是FeignClientsConfiguretion;Ribbon的声明式覆盖方式是在@RibbonClient注解后添加自定义的configuration,而Feign是在@FeignClient注解后添加自定义的configuration。这样看来,Feign的配置覆盖方式和Ribbon配置是一样的。

我们就可以在自定义的configuration配置类,去重新覆盖上面的Bean,来实现Feign的默认配置的修改,以符合项目的实际要求

定义一个ConfigurationFegin,用来覆盖默认的feign配置,为了不与@ComponentScan包冲突,启类的注解@SpringBootApplication包含@ComponentScan,因此自定义的配置文件不与启动类在同一个包下:新建一个config文件夹放到com.ljf.weifuwu.springcloud.fegin和这个包平级的位置,如图:

一.自定义fegin配置fegin覆盖默认配置,让fegin的接口中不支持springmvc的注解

1.config下的UserFeginConfig:

package config;

import feign.Contract;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class UserFeginConfig {
    /**
     * 作用是让fegin不支持springmvc的注解,只能使用Feign自己的注解,而不能使用Spring MVC的注解了。
     * @return
     */
    @Bean
    public Contract feignContract() {
        return new feign.Contract.Default();//只识别Feign的注释,不再识别Spring MVC的HTTP注释。
    }

}

2.fegin接口的引用:接口中两个方法的@Requestmaping...注解先不改,启动服务访问

package com.ljf.weifuwu.springcloud.fegin.service;

import com.ljf.weifuwu.springcloud.fegin.model.FeginUser;
import config.UserFeginConfig;
import feign.Param;
import feign.RequestLine;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*;

@FeignClient(name="ms-eureka-provider",configuration = UserFeginConfig.class)
public interface UserFeginClientServvice {
    // 两个坑:1. 在feigin的接口中不能用GetMapping ,改为requestmapping method=rquestmethod.get  
   //2. @PathVariable得设置@PathVariable(“xxx”)
   @RequestMapping(value = "/eureka-provider/{id}", method = RequestMethod.GET)
  public FeginUser getSingleUser(@PathVariable("id") Long id);
    //post请求
   @RequestMapping(value="/eureka-user",method = RequestMethod.POST)
}

3.启动服务:报错,大概意思就是:fegin不支持spring mvc的注解

4.将借口中的方法路径的注解,改为fegin自己特有的访问方式:

 @RequestLine("GET /eureka-provider/{id}")
 public FeginUser getSingleUser(@Param("id") Long id);
 //post请求
 @RequestLine("POST /eureka-user")
 public FeginUser getEurekaUserByPost(@RequestBody FeginUser user);
package com.ljf.weifuwu.springcloud.fegin.service;

import com.ljf.weifuwu.springcloud.fegin.model.FeginUser;
import config.UserFeginConfig;
import feign.Param;
import feign.RequestLine;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*;

@FeignClient(name="ms-eureka-provider",configuration = UserFeginConfig.class)
public interface UserFeginClientServvice {
    // 两个坑:1. 在feigin的接口中不能用GetMapping ,改为requestmapping method=rquestmethod.get  2. @PathVariable得设置@PathVariable(“xxx”)
   //@RequestMapping(value = "/eureka-provider/{id}", method = RequestMethod.GET)
   // public FeginUser getSingleUser(@PathVariable("id") Long id);
    @RequestLine("GET /eureka-provider/{id}")
    public FeginUser getSingleUser(@Param("id") Long id);
    //post请求
   // @RequestMapping(value="/eureka-user",method = RequestMethod.POST)
    @RequestLine("POST /eureka-user")
    public FeginUser getEurekaUserByPost(@RequestBody FeginUser user);

}

5.启动服务:ms-eureka-center(8761)、ms-eureka-provider(9701)、ms-fegin-consumer(8004)

5.1 post方式:http://localhost:8004/fegin-consumer-post?id=123&username=ljf&name=jurf

5.2 get方式:http://localhost:8004/fegin-consumer/1

二.fegin日志的配置

1.yml配置文件

logging:
  level:
     com.ljf.weifuwu.springcloud.fegin.service.UserFeginClientServvice: DEBUG

2.fegin的配置文件:

/**
 * //feign配置日志
 * @return
 */
@Bean
Logger.Level feignLoggerLevel() {
    return Logger.Level.FULL;
}

3.重新启动服务:进行访问:http://localhost:8004/fegin-consumer/1

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值