插件式编程SBP框架极简教程(基于SpringBoot)_sbp test_追寻上飞的博客-CSDN博客

插件式编程SBP框架极简教程(基于SpringBoot

一、前言

笔者在工作中遇到经常更改服务层的代码,就只是更改一小部分,但是就需要重启整个程序才能完成编译,既费时又费力。想寻求一种方法,能够在不重新编译整个应用程序的情况下更新服务层代码。想到的第一个方法是通过动态加载jar文件来更新,但是SpringBoot应用上下文还没搞太清楚,后续可以按照这个思路走下去;第二个方法是把需要更新的服务层以插件的方式运行,就是今天所要介绍的SBP框架,它能够将使得主程序模块加载其它模块的控制器、服务层、数据访问层的代码,完成插件式的编程,实现插件的动态的启动、停止以及删除。

二、背景

项目sbp是基于springboot做的封装框架,已经初步成熟,可以投入到项目中使用。如何快速理解sbp项目,没有比跑通更为直接的了,就像玩游戏先玩后摸索。
由于sbp项目没有清晰地叙述构建插件编程的流程,因此又查询基于sbp的使用仓库,于是查找到sbp-test用来测试sbp的使用。
sbp-test项目又引入了很多杂项,因此我就精简了该项目,用于新手快速上手跑通sbp项目。代码我也上托管到了Git仓库,传送门在此,可以直接下载享用。

三、项目简介

整个项目的目录结构如下所示。主模块是application,是一个springboot-web应用。
在这里插入图片描述
主程序的资源文件内容如下。

server.port: 8071

spring:
  mvc:
    static-path-pattern: /**
  resources:
    add-mappings: true
    cache:
      period: 3600
  sbp:
    runtime-mode: development
#    runtime-mode: deployment
    plugins-root: plugins
    enabled: true
    lib-directories:
      - "libs"
#    auto-start-plugin: false
    classes-directories:
      - "target/classes"
#      - "out/production/classes"
#      - "out/production/resources"
#    controller:
#      base-path: "fr/trouillet"

其中plugins文件夹里包含两个插件ab
在这两个插件里分别实现了两个控制器。其中a插件的控制器代码如下。

@RestController
@RequestMapping(value = "/aplugin")
public class APluginController {

    @RequestMapping(value = "/name")
    public String name() {
        return "aplugin";
    }
}

b插件的控制器代码如下。

@RestController
@RequestMapping(value = "/bplugin")
public class BPluginController {

    @RequestMapping(value = "/name")
    public String name() {
        return "bplugin";
    }
}

四 、看效果

4.1 测试主程序接口

接口地址为:http://127.0.0.1:8071/plugins/id
测试结果:
在这里插入图片描述

4.2 测试A插件程序接口

接口地址为:http://127.0.0.1:8071/aplugin/name
测试结果:
在这里插入图片描述

4.3 测试B插件程序接口

接口地址为:http://127.0.0.1:8071/bplugin/name
测试结果:
在这里插入图片描述

五 、展望

现在依旧不是需要的结果,这是直接运行起来的结果,不是动态的加载。后续再进一步研究。


原网址: 访问
创建于: 2023-08-01 17:51:22
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论