插件式编程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: 8071spring:mvc:static-path-pattern: /**resources:add-mappings: truecache:period: 3600sbp:runtime-mode: development
#    runtime-mode: deploymentplugins-root: pluginsenabled: truelib-directories:- "libs"
#    auto-start-plugin: falseclasses-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
测试结果:

五 、展望

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

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

  1. 《Springboot极简教程》Springboot使用Kotlin和Java混合编程

    配置 要想实现Springboot使用Kotlin和Java混合编程,需要使用kotlin插件: spring-boot-gradle-plugin kotlin-gradle-plugin 具体配置 ...

  2. 《Kotin 极简教程》第8章 函数式编程(FP)(1)

    第8章 函数式编程(FP) <Kotlin极简教程>正式上架: 点击这里 > 去京东商城购买阅读 点击这里 > 去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多支持!!!有任 ...

  3. 【编程实践】Google Guava 极简教程

    前言 Guava 工程包含了若干被 Google 的 Java 项目广泛依赖 的核心库,我们希望通过此文档为 Guava 中最流行和最强大的功能,提供更具可读性和解释性的说明. 适用人群 本教程是基础 ...

  4. 【编程实践】Linux / UNIX Shell编程极简教程

    不同于一般的介绍Linux Shell 的文章,本文并未花大篇幅去介绍 Shell 语法,而是以面向"对象" 的方式引入大量的实例介绍 Shell 日常操作,"对象&qu ...

  5. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程

    Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...

  6. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

  7. 前端自动化测试框架 Jest 极简教程

    前端自动化测试框架 Jest 极简教程 Delightful JavaScript Testing. https://jestjs.io Jest是由Facebook发布的开源的.基于Jasmine的 ...

  8. 《Kotin 极简教程》第7章 面向对象编程(OOP)(1)

    第7章 面向对象编程(OOP) 最新上架!!!< Kotlin极简教程> 陈光剑 (机械工业出版社) 可直接打开京东,淘宝,当当===> 搜索: Kotlin 极简教程 http:/ ...

  9. 《Kotin 极简教程》第13章 使用 Kotlin 和 Anko 的Android 开发

    第13章 使用 Kotlin 和 Anko 的Android 开发 最新上架!!!< Kotlin极简教程> 陈光剑 (机械工业出版社) 可直接打开京东,淘宝,当当===> 搜索: ...

最新文章

  1. linux下如何查询jdk的安装路径
  2. py+selenium 报错NameError: name 'NoSuchElementException' is not defined【已解决】
  3. php把年份转为int,PHP将DateInterval转换为int
  4. js与php时间戳,js时间戳与日期格式之间的互转
  5. Linux工作笔记-查看tcp与udp端口并对比Windows简单分析
  6. (19)Verilog HDL顺序块:begin-end
  7. d - 数据结构实验之查找四:二分查找_数据结构与算法笔记
  8. GEE学习笔记3-导出table数据
  9. OpenHarmony AI图像识别开发—基于润和Hi3516开发套件
  10. 非度量多维标度_16s分析作图之NMDS非度量多维尺度分析
  11. MTCNN人脸检测与人脸对齐
  12. Ip以及主机名称配置
  13. 互动课件制作 html,如何实现多图版互动式图片课件的制作
  14. android禁用传感器,Android 系统 强制 禁用 距离传感器 方法
  15. 计算机内存错误 要降频,win7系统出现内存自动降频的解决方法
  16. 判断将输入字母,进行大写转小写,小写转大写
  17. 爱快固件是Linux系统吗,Linux 系统下 VirtualBox 里安装爱快系统 (2.4.4)
  18. SQL Server 2017 安装必备
  19. 脚本记录:移动端图片扩大缩小
  20. [2022-03-21] sqlplus 显示格式化

热门文章

  1. js给动态添加的元素添加属性
  2. 做了一个B站Up主推荐系统
  3. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。
  4. YOLOv3论文全文完整理解翻译
  5. 一程序员被网恋女友诈骗1.8万,警方调查“女友”后发现竟是...
  6. 什么是soft wrap,什么是IDEA的soft wrap,如何设置IDEA默认所有类型的文件都自动换行(如何设置用IDEA打开markdown文件不自动换行)
  7. jwt接口认证方式:Bearer Token
  8. 我也来分享一个魔兽显血改键工具
  9. 拼音魔法 使用switch case简化复杂的if else
  10. RFID人员定位设备具体配置