插件式编程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: 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
文件夹里包含两个插件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
测试结果:
五 、展望
现在依旧不是需要的结果,这是直接运行起来的结果,不是动态的加载。后续再进一步研究。
插件式编程SBP框架极简教程(基于SpringBoot)相关推荐
- 《Springboot极简教程》Springboot使用Kotlin和Java混合编程
配置 要想实现Springboot使用Kotlin和Java混合编程,需要使用kotlin插件: spring-boot-gradle-plugin kotlin-gradle-plugin 具体配置 ...
- 《Kotin 极简教程》第8章 函数式编程(FP)(1)
第8章 函数式编程(FP) <Kotlin极简教程>正式上架: 点击这里 > 去京东商城购买阅读 点击这里 > 去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多支持!!!有任 ...
- 【编程实践】Google Guava 极简教程
前言 Guava 工程包含了若干被 Google 的 Java 项目广泛依赖 的核心库,我们希望通过此文档为 Guava 中最流行和最强大的功能,提供更具可读性和解释性的说明. 适用人群 本教程是基础 ...
- 【编程实践】Linux / UNIX Shell编程极简教程
不同于一般的介绍Linux Shell 的文章,本文并未花大篇幅去介绍 Shell 语法,而是以面向"对象" 的方式引入大量的实例介绍 Shell 日常操作,"对象&qu ...
- 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程
Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...
- Asky极简教程:零基础1小时学编程,已更新前8节
Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...
- 前端自动化测试框架 Jest 极简教程
前端自动化测试框架 Jest 极简教程 Delightful JavaScript Testing. https://jestjs.io Jest是由Facebook发布的开源的.基于Jasmine的 ...
- 《Kotin 极简教程》第7章 面向对象编程(OOP)(1)
第7章 面向对象编程(OOP) 最新上架!!!< Kotlin极简教程> 陈光剑 (机械工业出版社) 可直接打开京东,淘宝,当当===> 搜索: Kotlin 极简教程 http:/ ...
- 《Kotin 极简教程》第13章 使用 Kotlin 和 Anko 的Android 开发
第13章 使用 Kotlin 和 Anko 的Android 开发 最新上架!!!< Kotlin极简教程> 陈光剑 (机械工业出版社) 可直接打开京东,淘宝,当当===> 搜索: ...
最新文章
- linux下如何查询jdk的安装路径
- py+selenium 报错NameError: name 'NoSuchElementException' is not defined【已解决】
- php把年份转为int,PHP将DateInterval转换为int
- js与php时间戳,js时间戳与日期格式之间的互转
- Linux工作笔记-查看tcp与udp端口并对比Windows简单分析
- (19)Verilog HDL顺序块:begin-end
- d - 数据结构实验之查找四:二分查找_数据结构与算法笔记
- GEE学习笔记3-导出table数据
- OpenHarmony AI图像识别开发—基于润和Hi3516开发套件
- 非度量多维标度_16s分析作图之NMDS非度量多维尺度分析
- MTCNN人脸检测与人脸对齐
- Ip以及主机名称配置
- 互动课件制作 html,如何实现多图版互动式图片课件的制作
- android禁用传感器,Android 系统 强制 禁用 距离传感器 方法
- 计算机内存错误 要降频,win7系统出现内存自动降频的解决方法
- 判断将输入字母,进行大写转小写,小写转大写
- 爱快固件是Linux系统吗,Linux 系统下 VirtualBox 里安装爱快系统 (2.4.4)
- SQL Server 2017 安装必备
- 脚本记录:移动端图片扩大缩小
- [2022-03-21] sqlplus 显示格式化
热门文章
- js给动态添加的元素添加属性
- 做了一个B站Up主推荐系统
- XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。
- YOLOv3论文全文完整理解翻译
- 一程序员被网恋女友诈骗1.8万,警方调查“女友”后发现竟是...
- 什么是soft wrap,什么是IDEA的soft wrap,如何设置IDEA默认所有类型的文件都自动换行(如何设置用IDEA打开markdown文件不自动换行)
- jwt接口认证方式:Bearer Token
- 我也来分享一个魔兽显血改键工具
- 拼音魔法 使用switch case简化复杂的if else
- RFID人员定位设备具体配置