最近发现开发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源代码。

1、插件依赖

<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>

2、参数说明

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

3、Maven编译工程

mvn clean compile

三、Cli命令行版

1、命令示例

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

2、参数说明

参数 说明 默认值
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源代码在线查看等功能。

1、示例服务

数据库配置,编辑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

2、打包及运行

cd feign-generator-server-demo

mvn clean package

cd target

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

3、工程管理页面

4、FeignClient管理页面

5、Model管理页面

6、集成

引入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模板技术

feign接口自动生成工具的更多相关文章

  1. iBatis 代码自动生成工具 iBator 及 Example 使用

    iBator的下载和安装 官方下载地址:http://people.apache.org/builds/ibatis/ibator/ 安装:见<Eclipse 插件安装> 安装完成后,“F ...

  2. h5自动生成工具

    一.前言 写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式.其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行.直到某天我真的写够了,我决定动手 ...

  3. 代码自动生成工具MyGeneration之一(程序员必备工具)

    代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrows ...

  4. Makefile自动生成工具-----autotools的使用(详细)

    相信每个学习Linux的人都知道Makefile,这是一个很有用的东西,但是编写它是比较复杂,今天介绍一个它的自动生成工具,autotools的使用.很多GNULinux的的软件都是用它生成Makef ...

  5. Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展

    Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...

  6. springboot成神之——swagger文档自动生成工具

    本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...

  7. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)

    TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...

  8. C# 代码自动生成工具

    开源:C# 代码自动生成工具,支持站点前后台   前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...

  9. .NET SourceGenerators 根据 HTTPAPI 接口自动生成实现类

    目录 摘要 元数据分析 使用 Source generators 实现 使用 Source generators 实现程序集分析 使用方法 SourceCode && Nuget pa ...

  10. feign代码自动生成插件

    简介 feign对微服务之间的http调用做了一层封装,如果B项目想调用A项目的一个web服务,只需要编写对应的接口并标注FeignClient注解.但如果接口发生了变更,对应的Feign代码往往会忘 ...

随机推荐

  1. 本地tomcat设置外网访问

    将host name中的localhost修改为自己电脑的IP地址,具体的IP地址可以在控制面板的网络和共享中心中进行查看, 打开tomcat的conf文件夹下的server.xml文件,将local ...

  2. Reactor 简介

    官方的介绍如下: Reactor is a fully non-blocking reactive programming foundation for the JVM, with efficient ...

  3. 如何构建一个 NodeJS 影院微服务并使用 Docker 部署

    如何构建一个 NodeJS 影院微服务并使用 Docker 部署 前言 如何构建一个 NodeJS 影院微服务并使用 Docker 部署.在这个系列中,将构建一个 NodeJS 微服务,并使用 Doc ...

  4. POJ 1156 单调队列优化

    原题链接 题意 给我们一个n * m矩阵,要求我们求出一个面积最大的子矩阵,满足其内部的极差小于等于c, 同时宽度小于等于100 输入 m, n, c,求这个最大面积.n,m <= 700,c ...

  5. Typora+Docsify快速入门

    Typora是什么? ​ Typora中文版是一款好用极简的跨平台Markdown编辑器,软件使用这款软件能够帮助用户轻松将文本转换到HTML,软件从底层向上设计,软件支持markdown的标准语法, ...

  6. Python中的@abstractmethod

      @abstractmethod 是 Python 中 abc 模块(Abstract Base Classes)提供的一个装饰器,用于声明抽象方法.抽象方法是指在抽象类中声明但没有提供具体实现的方 ...

  7. GaussDB(DWS)运维 :遇到truncate执行慢,怎么办?

    摘要:truncate执行慢,耗时长达几十到几百秒,这可怎么破? 本文分享自华为云社区<GaussDB(DWS)运维 -- truncate慢>,作者: 譡里个檔. [现象]truncat ...

  8. 详解openGauss多线程架构启动过程

    摘要:本文介绍openGauss数据库的启动过程,包括主线程,辅助线程及业务处理线程的启动过程. 本文分享自华为云社区<openGauss内核分析(一):openGauss 多线程架构启动过程详 ...

  9. 对话 BitSail Contributor | 姚泽宇:新生火焰,未来亦可燎原

    2022 年 10 月,字节跳动 BitSail 数据引擎正式开源.同期,社区推出 Contributor 激励计划第一期,目前已有 12 位开发者为 BitSail 社区做出贡献,成为了首批 Bit ...

  10. Linux 创建新用户

    添加用户组[root@VipSoft ~]#groupadd admin 添加用户[root@VipSoft ~]#useradd jimmy -m -d /home/jimmy -g admin 修 ...