spring-brick 为动态扩展系统而生的插件开发框架

背景

在当下后端市场,还是以spring-boot为核心框架进行系统开发,本框架可以在spring-boot系统上进行插件式的开发,将插件当做一个mini版本的spring-boot进行系统扩展开发,可以解决如下痛点:

  1. 在To-B系统场景中,不同甲方会有不同的需求,在不打分支和改动系统核心代码的前提下,可以在插件中进行扩展开发特定功能,不同甲方使用不同插件,完美解决非核心系统的扩展功能开发,例如扩展中台系统的不同需求。
  2. 在To-C系统场景中,可以在主程序通过定义java-interface,在插件中做不同实现,来达到动态扩展系统功能。
  3. 在开发中,由于引入了不同版本的依赖,导致系统无法运行,本框架可以完美解决在不同插件中定义不同版本的依赖,从底层进行隔离,以解决引入不同版本依赖冲突的问题。比如可以完美解决系统同时连接数据库mysql-5和mysql-8版本。
  4. 在开发中,不同插件依赖不同框架的功能,可以按需引入。比如在插件A引入连接mysql、在插件B引入连接elasticsearch、在插件C引入连接oracle。
  5. 在插件中,可以任意集成不同的非web类型的springboot-xx-starter,然后将不同插件功能组装起来,以达到一个统一对外提供服务的完整系统,实现系统组装化、插拔化开发
  6. 在不重启主程序的前提下,对插件进行动态的安装、卸载、启动、停止

介绍

该框架可以在spring-boot项目上开发出插件功能,在插件中可以和spring-boot使用方式一模一样。使用了本框架您可以实现如下需求:

特性

  1. 简化了框架的集成步骤,更容易上手。
  2. 插件开发更加贴近spring-boot原生开发。
  3. 支持两种模式开发: 隔离模式、共享模式, 可自主根据需要灵活选择使用。
  4. 使用Maven打包插件,支持对插件的自主打包编译。目前支持:
  1. 自主的开发的类加载器,支持插件定义各种的依赖jar包。
  2. 在插件中可以集成各种框架及其各种spring-boot-xxx-starter,比如集成mybatis、mybatis-plus、spring-jpa等。
  3. 动态安装、卸载、启动、停止插件。
  4. 主程序和插件类隔离, 有效避免主程序与插件、插件与插件之间的类冲突。

架构

主程序配置集成

1. 引入框架依赖


  com.gitee.starblues
  spring-brick
  ${latest.version}

2. 在配置文件加入配置

plugin:
  runMode: dev
  mainPackage: com.gitee.starblues.example
  pluginPath:
     - D://project//plugins(替换为自己环境下插件目录)

runMode: 运行模式, 开发环境: dev; 生产环境: prod。dev环境下,只适用于在idea环境下开发调试,prod环境只能加载打包的插件,比如jar、zip等,插件打包详见: 插件打包详细说明

mainPackage: 主程序扫描的包名。

pluginPath: 插件目录或者插件上级目录,可配置多个。

3. 改造 Spring-Boot 启动类

import com.gitee.starblues.loader.launcher.SpringMainBootstrap;
import com.gitee.starblues.loader.launcher.SpringBootstrap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application implements SpringBootstrap {

    public static void main(String[] args) {
        // 该处使用 SpringMainBootstrap 引导启动
        SpringMainBootstrap.launch(Application.class, args);
    }

    @Override
    public void run(String[] args) throws Exception {
        // 在该实现方法中, 和 SpringBoot 使用方式一致
        SpringApplication.run(Application.class, args);
    }
}

4. 打包主程序

插件配置集成

1. 引入依赖




  org.springframework.boot
  spring-boot-starter
  ${和主程序一致的springboot版本}




  com.gitee.starblues
  spring-brick-bootstrap
  ${latest.version}





  主程序的 groupId
  主程序的 artifactId
  主程序 version
  provided

2. 定义插件引导类


注意:插件包名不能和主程序包名一致,如需一致,需遵循:插件包名范围小于等于主程序包名。

详细规则可见:https://www.yuque.com/starblues/spring-brick-3.0.0/siet7b


import com.gitee.starblues.bootstrap.SpringPluginBootstrap;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ExamplePlugin extends SpringPluginBootstrap {
    
    public static void main(String[] args) {
        new ExamplePlugin().run(args);
    }
    
}

3. 配置Maven打包插件


  
    
      com.gitee.starblues
      spring-brick-maven-packager
      ${latest.version}
      
        
        dev
        
        
          
          plugin-example
          
          com.gitee.starblues.example.ExamplePlugin
          
          1.0.0-SNAPSHOT
        
      
      
        
          
            repackage
          
        
      
    
  

4. 新增 Controller 接口

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/example")
public class ExampleController {
    @GetMapping
    public String hello(){
        return "hello";
    }
}

5. 编译插件

启动测试

c.g.s.i.operator.DefaultPluginOperator   : 插件加载环境: dev
c.g.s.core.PluginLauncherManager         : 插件[plugin-example@1.0.0-SNAPSHOT]加载成功
c.g.s.b.p.web.PluginControllerProcessor  : 插件[plugin-example]注册接口: {GET [/plugins/module1/example]}
c.g.s.core.PluginLauncherManager         : 插件[plugin-example@1.0.0-SNAPSHOT]启动成功
c.g.s.i.operator.DefaultPluginOperator   : 插件初始化完成
展开阅读全文

页面更新:2024-03-31

标签:插件   框架   主程序   系统   定义   需求   版本   功能   环境   动态   插件包

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top