当前位置:首页 > 服务端 > feign接口自动生成工具

feign接口自动生成工具

2022年11月09日 16:09:33服务端6

Feign-Generator

介绍

最近发现开发spring cloud时,编写feign接口是一件痛苦的事,不仅要编写feign接口,还有fallback、请求参数和返回值等,大量重复工作,很浪费时间。

于是便想到可以编写工具自动生成feign接口。

实现起来并不复杂,就是把提供方工程的类加载进来,扫描controller和model生成meta信息,使用模板生成源代码,保存到本地或集中管理feign接口源代码的服务。

本文就简单介绍一下这个自动化工具的使用和核心技术。

spring boot工程feign接口自动工具,含maven插件和cli工具。


下载编译

git clone https://gitee.com/xuguofeng2020/feign-generator.git

cd feign-generator

mvn install

Maven插件版

您可以把插件引入到工程中,插件会在编译阶段扫描controller类,生成feign接口元数据并将其发送给中央管理server服务进行集中管理,或在本地保存feign源代码。


插件依赖

<plugin>
  <groupId>org.net5ijy.cloud</groupId>
  <artifactId>feign-generator-plugin</artifactId>
  <version>1.0.0</version>
  <executions>
    <execution>
      <phase>compile</phase>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <scanPackage>org.net5ijy.mall.account.controller</scanPackage>
        <modelScanPackage>org.net5ijy.mall.account</modelScanPackage>
        <manageServerUrl>http://localhost:10001/api/v1/feign/generate</manageServerUrl>
        <!-- <local>true</local> -->
      </configuration>
    </execution>
  </executions>
</plugin>

参数说明

参数 说明 默认值
scanPackage 配置扫描controller的基础包名 org.net5ijy.cloud
modelScanPackage 配置扫描参数、返回值的基础包名。如果接口参数、返回值类型不在这个包下面,不会加入到model元数据中 org.net5ijy.cloud
manageServerUrl 集中管理服务接收元数据的接口地址,如果local配置为true,该参数就不会起作用 -
local 本地保存 false

Maven编译工程

mvn clean compile

Cli命令行版

命令示例

cd feign-generator-cli

copy scripts\run.bat target

cd target

## 本地保存feign接口源代码
run.bat D:\workspace\net5ijy-mall-accountservice\target\net5ijy-mall-accountservice.jar org.net5ijy.mall.account.controller org.net5ijy.mall.account

# 或者将feign接口元数据发送给集中管理服务
run.bat D:\workspace\net5ijy-mall-accountservice\target\net5ijy-mall-accountservice.jar org.net5ijy.mall.account.controller org.net5ijy.mall.account remote http://localhost:10001/api/v1/feign/generate

参数说明

参数 说明 默认值
1 工程jar路径 -
2 配置扫描controller的基础包名 -
3 配置扫描参数、返回值的基础包名。如果接口参数、返回值类型不在这个包下面,不会加入到model元数据中 -
4 如何保存feign接口元数据,local - 本地保存,remote - 发送给中央管理server服务 local
5 集中管理服务接收元数据的接口地址 http://localhost:10001/api/v1/feign/generate

集中管理服务

用于集中管理工程、feign接口源代码、model源代码,提供工程查看、feign接口源代码下载、feign接口及fallback类源代码在线查看、model源代码在线查看等功能。

示例服务

数据库配置

编辑application.yml文件,修改datasource相关配置:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://mysql-dba-1:3306/feign
    username: system
    password: ******
    druid:
      filters: stat
      maxActive: 5
      initialSize: 5
      maxWait: 60000
      minIdle: 1
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      maxOpenPreparedStatements: 5

打包及运行

cd feign-generator-server-demo

mvn clean package

cd target

java -jar feign-generator-server-demo.jar

工程管理页面

feign接口自动生成工具 _ JavaClub全栈架构师技术笔记

feign接口自动生成工具 _ JavaClub全栈架构师技术笔记

FeignClient管理页面

feign接口自动生成工具 _ JavaClub全栈架构师技术笔记
feign接口自动生成工具 _ JavaClub全栈架构师技术笔记

Model管理页面

feign接口自动生成工具 _ JavaClub全栈架构师技术笔记
feign接口自动生成工具 _ JavaClub全栈架构师技术笔记


集成

引入依赖

引入feign-generator-server依赖:

<!-- feign-generator-server -->
<dependency>
  <groupId>org.net5ijy.cloud</groupId>
  <artifactId>feign-generator-server</artifactId>
  <version>1.0.0</version>
</dependency>

在启动类配置组件扫描:

@SpringBootApplication(scanBasePackages = {
     "org.net5ijy.cloud.feign.demo", "org.net5ijy.cloud.plugin.feign.server"})
@MapperScan({
     "org.net5ijy.cloud.plugin.feign.server.mapper"})

接口列表

feign-generator-server会提供查看工程、feign接口、model类的相关接口,如下:

接口 请求方式 作用 参数
/api/v1/feign/{id} GET 根据ID查询工程信息 -
/api/v1/feign/search GET 根据groupId、projectName分页查询工程 groupId、projectName、page、size
/api/v1/feign/clients GET 根据工程ID分页查询feign client projectId、page、size
/api/v1/feign/client/{id} GET 根据feign client id查询client -
/api/v1/feign/models GET 根据工程ID分页查询model projectId、page、size
/api/v1/feign/model/{id} GET 根据ID查询model -
/api/v1/feign/download/{id} POST 下载工程的feign client源代码zip文件 -
/api/v1/feign/project/all GET 获取全部工程,用于下拉列表等功能 -

您可以在已有的管理平台开发前端,使用以上接口获取后台数据进行展示。


核心组件

  • feign-generator-core - core组件提供封装工程、feign client、model元数据的类,free marker模板解析器,controller扫描器,以及用于生成源代码的free marker模板。
  • feign-generator-plugin - Maven插件。
  • feign-generator-server - 为集中管理服务提供接口能力。
  • feign-generator-cli - 命令行工具,提供的能力和maven插件基本相同。
  • feign-generator-server-demo - 集中管理服务示例。

核心技术

  • maven插件开发
  • 动态类加载
  • java反射技术
  • free marker模板技术

作者:xuguofeng2016
来源链接:https://blog.csdn.net/xuguofeng2016/article/details/111461569

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68860.html

标签: Feign
分享给朋友:

“feign接口自动生成工具” 的相关文章

Spring Cloud Feign 如何使用对象参数

概述Spring Cloud Feign 用于微服务的封装,通过接口代理的实现方式让微服务调用变得简单,让微服务的使用上如同本地服务。但是它在传参方面不是很完美。在使用 Feign 代理 GET 请求时,对于简单参数(基本类型、包装器、字符串)的使用上没有困难,但是在使用对象传参时却无法自动的将对象...

SpringCloud服务调用之OpenFeign

SpringCloud服务调用之OpenFeign

     怎么使用? 注意:FeignClinet 是在消费段调用。Feign自带负载均衡配置项 1.导入pom <?xml version="1.0" e...

45、nacos集成openfeign

45、nacos集成openfeign

nacos集成openfeign 一、创建服务提供者项目-nacos-producer 二、添加服务消费者项目-nacos-openfeign...

Springcloud踩坑记---使用feignclient远程调用服务404

Springcloud踩坑记---使用feignclient远程调用服务404

公司项目进行微服务改造,由之前的dubbo改用SpringCloud,微服务之间通过FeignClient进行调用,今天在测试的时候,eureka注册中心有相应的服务,但feignclient就是无法调通,一直报404错误,排查过程如下: 一、问题:   服务提供方定义的接...

SpringCloud 中集成Sentinel+Feign实现服务熔断降级

SpringCloud 中集成Sentinel+Feign实现服务熔断降级

Sentine 1.背景 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。这里大家可能会问:Sentinel 和之前常用的熔断降级库 Netf...

SpringCloud(三)-  OpenFeign简介及@FeignClient等注解的使用

SpringCloud(三)- OpenFeign简介及@FeignClient等注解的使用

《 心有多大,舞台就有多大 人得有—理想 》 OpenFeign简介及@FeignClient等注解的使用 唯能极于情,故能极于剑 有问题或错误请及时联系小编或关注小编公众号 "CodeCow",小编一定及时回复和改正,期待和大家一起学习交流 此...

SpringCloud组件:Feign之日志输出

目录 Feign之日志输出 Feign日志输出说明 前期准备 构建项目 tairan-spring-cloud-feign-logger配置 源码位置 Feign之日志输出...

SpringCloud和Dubbo的区别及Dubbo和Feign远程调用的差异

SpringCloud和Dubbo的区别 SpringCloud和Dubbo有什么区别? 两者都是现在主流的微服务框架,但却存在不少差异: 初始定位不同:SpringCloud定位为微服务架构下的一站式解决方案;Dubbo 是...

微服务调用组件Dubbo实战 & Open Feign迁移到Dubbo解决方案

微服务调用组件Dubbo实战 & Open Feign迁移到Dubbo解决方案

文章目录 一、Spring Cloud整合Dubbo 1.1 spring-cloud-dubbo-api 1.2 spring-cloud-dubbo-provider-...

Feign服务之间的鉴权问题

Feign服务调服务传递数据的时候,需要带token验证的,而调用那个用户服务的时候被用户服务方拦截然后没有token进不去接口,很明显的是因为没有token导致,那么Feign里面有提供一个接口叫做RequestInterceptor,只要实...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。