记录SpringBoot集成Feign以及所遇到的坑

红烧土豆泥
• 阅读 469

一、通过Feign进行远程服务调用

数据库表信息

  SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int NULL DEFAULT NULL COMMENT '年龄',
  `balance` decimal(10, 0) NULL DEFAULT NULL COMMENT '账户余额',
  `db` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据库',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES (1, 'account1', NULL, '张三', 20, 100, '数据库1');
INSERT INTO `t_user` VALUES (2, 'account2', NULL, '李四', 28, 180, '数据库1');

SET FOREIGN_KEY_CHECKS = 1;

使用到的Maven依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

启动类

@SpringBootApplication
@EnableFeignClients  //添加feign的启动注解
public class HomeworkStudentFeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(HomeworkStudentFeignApplication.class, args);
    }
}

编写通过feign进行调用应用的处理接口

@Service
@FeignClient(name = "HOMEWORK-PRODUCT")
public interface UserFeignClient {

    @GetMapping("/get/{id}")
    UserEntity getUser(@PathVariable("id") String id);

}

注意点:如果报异常说UserFeignClient的Bean未注册或这未找到,此处的 @Service 注解最好是加上。看了很多博客说将 spring-cloud-starter-openfeign 换成spring-cloud-openfeign-core ,我试了未能解决,所以又改回来了。解决的办法,就是加上@Service注解,删除之前的已经编译的文件,重启了IDEA。

二、Feign的日志打印

在yml中配置全局的日志输出级别

  logging:
    level:
      com.demo.student.service.feign.UserFeignClient: DEBUG

可以对feign的日志输出级别,连接超时时间重定义

 feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000
        loggerLevel: full
        encoder: feign.form.spring.SpringFormEncoder
  compression:
    request:
      enabled: true
    response:
      enabled: true

更详细的参数信息请查看(FeignClientConfiguration类) 当查询时会在控制台中打印出相应的日志信息 记录SpringBoot集成Feign以及所遇到的坑

三、Feign的自定义配置

首先需要修改feign的契约为其默认的契约

@Configuration
public class FeignConfig {
    @Bean
    public Contract feignContract(){
        return new Contract.Default();
    }
}

在feign的嗲用接口处指定加载契约组件

@Service
@FeignClient(name = "HOMEWORK-PRODUCT",configuration = {FeignConfig.class, FeignLogConfig.class})
public interface UserFeignClient {

    @RequestLine("GET /get/{id}")
    UserEntity getUser(@Param("id") String id);
}

注:此处需要使用RequestLine注解,并在里面指定请求方式是GET 还是POST,对于传递的参数,需要@Param进行标注。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
11个月前
mysql三种锁
不使用索引 ----- CREATE TABLE `test1` ( `id` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ![](https://osc
Wesley13 Wesley13
11个月前
C 扩展库
CRUD ==== table ----- create table if not exists `student` ( `id` int auto_increment, `name` varchar(16) not null, `age` int not null, `addres
Wesley13 Wesley13
11个月前
ORDER BY优化(MySQL高级知识八)
前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index。 * * * ### 0.准备 #1.创建test表。 drop table if exists test; create table test( id int primary key auto\_increme
Wesley13 Wesley13
11个月前
MySQL 24小时入门笔记(4)表的创建、修改、删除
MySQL 24小时入门笔记 ============== 创建表 --- ### CREATE TABLE `CREATE TABLE`的作用是创建表。不多说,先创建个简单的学生表。 CREATE TABLE students ( id int, name char(16) NOT NULL,
Wesley13 Wesley13
11个月前
Mysql 分区表
DROP TABLE IF EXISTS \`frank\_test\`; CREATE TABLE \`frank\_test\` ( \`id\` bigint(20) NOT NULL AUTO\_INCREMENT COMMENT '主键id', \`gid\` bigint(20) DEFAULT '0' COMMENT '基础表id'
Wesley13 Wesley13
11个月前
mysql中int、bigint、smallint 和 tinyint的区别与长度
通过创建一张表,来看看 mysql 中 int bigint smallint 和 tinyint的区别与长度 1、在mysql 命令行创建如下表 CREATE TABLE `test_int_1` ( `int_id` int NOT NULL, `bigint_id` bigint DEFAULT NULL,
Wesley13 Wesley13
11个月前
mysql日常小练习
1.现有表情况如下: Create table If Not Exists Employee (Id int, Salary int); Truncate table Employee; insert into Employee (Id, Salary) values ('1', '100'); insert into Em
Wesley13 Wesley13
11个月前
oracle笔记——杂记篇
一、创建表的知识 -------- ###     1、创建表 _\--__用户信息_ create table tb\_operator( Id Int primary key,_\--__自动编号_ Name Varchar2(12),_\--__姓名_ Sex Varchar2(2),_\--__性别_ Age int,_\--_
Wesley13 Wesley13
11个月前
mysql存储、function、触发器等实例
一.创建数据库&表 1 DROP DATABASE IF EXISTS security; 2 CREATE database security; 3 USE security; 4 CREATE TABLE users 5 ( 6 id int(3) NOT NULL AUTO_INCREMEN
Stella981 Stella981
11个月前
MVC框架Wheel简单实例
这个教程,主要就是介绍如何使用MVC框架Wheel.简单的描述下我们想要做的事情,创建一个user表,然后通过不同的视图方式显示出user表的内容。我们采用Mysql数据库. 数据库 === DROP TABLE IF EXISTS `user_`; CREATE TABLE `user_` ( `id` int(11) NO