栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

插件式编程SBP框架极简教程(基于SpringBoot
    • 一、前言
    • 二、背景
    • 三、项目简介
    • 四 、看效果
      • 4.1 测试主程序接口
      • 4.2 测试A插件程序接口
      • 4.3 测试B插件程序接口
    • 五 、展望

一、前言

笔者在工作中遇到经常更改服务层的代码,就只是更改一小部分,但是就需要重启整个程序才能完成编译,既费时又费力。想寻求一种方法,能够在不重新编译整个应用程序的情况下更新服务层代码。想到的第一个方法是通过动态加载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文件夹里包含两个插件a、b。
在这两个插件里分别实现了两个控制器。其中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
测试结果:

五 、展望

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340031.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号