zoukankan      html  css  js  c++  java
  • feign接口自动生成工具

    最近发现开发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
    un.bat target
    
    cd target
    
    ## 本地保存feign接口源代码
    run.bat D:workspace
    et5ijy-mall-accountservice	arget
    et5ijy-mall-accountservice.jar org.net5ijy.mall.account.controller org.net5ijy.mall.account
    
    # 或者将feign接口元数据发送给集中管理服务
    run.bat D:workspace
    et5ijy-mall-accountservice	arget
    et5ijy-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模板技术

  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/xugf/p/14164730.html
Copyright © 2011-2022 走看看