Go to file
dai_48k d9b2ef2e39 指令执行逻辑增强 2025-04-07 13:43:35 +08:00
.idea 指令执行逻辑增强 2025-04-07 13:43:35 +08:00
BKPG init 2025-04-01 15:58:54 +08:00
BKPG_DEMO init 2025-04-01 15:58:54 +08:00
BKPG_PROTOCAL 指令执行逻辑增强 2025-04-07 13:43:35 +08:00
PLUGIN_BKPG_GROUP_PROCESS 指令执行逻辑增强 2025-04-07 13:43:35 +08:00
ext 指令执行逻辑增强 2025-04-07 13:43:35 +08:00
.gitignore init 2025-04-01 15:58:54 +08:00
BKPG_PROj.iml init 2025-04-01 15:58:54 +08:00
LICENSE add LICENSE. 2025-04-01 08:08:41 +00:00
README.md 指令执行逻辑增强 2025-04-07 13:43:35 +08:00
pom.xml init 2025-04-01 15:58:54 +08:00

README.md

项目架构

主工程

模块 作用
BKPG 主应用程序
BKPG_PROTOCAL 三方扩展协议
BKPG_DEMO 简单示例扩展

官方扩展插件工程

模块 作用
PLUGIN_BKPG_GROUP_PROCESS 命令组

生产环境

  • JAVA : 8

主应用程序执行逻辑

  1. 应用启动绘制UI挂载到系统托盘
  2. 扫描注册ext目录下的jar包(扫描实现了MiniApp的类)
  3. 程序挂载

扩展协议

可用协议

MiniApp                    基础协议
    ┗ ProcessAppTemplate   命令执行协议模板
↑    
MiniAppGroup               程序组合包

协议结构定义

MiniApp

  • String getName(); // 获取应用名称
  • JPanel getPanel(); // 获取应用面板
  • boolean protect(); // 保护应用,重启是否重新装载

MiniAppGroup

  • List<MiniApp> getMiniApps(); // 获取所有的应用

ProcessAppTemplate: MiniApp

  • String getName(); // 获取应用名称
  • String getCmdStr(); // 需要执行的命令
  • String getRunPath(); // 默认实现返回null表示指令执行目录环境
  • 其余基类函数已默认实现

详细说明

MiniApp 为基础协议,所有的扩展实现都需要继承或者实现该协议, 主应用程序只会扫描到实现了该接口的类,并且注册到容器中。 MiniAppGroup是对MiniApp的扩展旨在一次性批量注入MiniApp 同样也会被扫描到其下的miniApp也都会被注册。

MiniApp中getName 是用于获取任务名称的,不用担心重复导致程序异常 (因为注册时采用的是类完整访问路径注册的) 不过建议名称具有标志性, 这样才能快速识别该任务所具备的特质。

getPanel 是绘制的面板,即右面板,实际的操作区,可以自定义, 也可以采用模板快速构建如ProcessAppTemplate。 如果自定义,或者制作模板,需要注意以下几点:

  1. 长连接的任务,强烈建议做好资源的调度,适量增加 任务控制按钮 (启动、终止);如果可监测,建议增加连接心跳监测机制, 在一定时间后,自动断开连接。
  2. 从A任务切换到B任务A任务面板会销毁调用B任务面板 但是任务的实例不会销毁,所以,你可以将一些数据存于全局变量来存储 上一会话的某些状态量。
  3. 主程序面板的大小是固定的,所以,为了界面协调,建议纵向布局, 并且内容较多的话,适量增加滚动条。
  4. 任务自身不建议开辟太大的内存空间,以免出现任务切换卡顿现象, 如果一定要用大量内存也做好完备的内存管控避免出现OOM的情况。

protect() 是保护函数如果返回true则表示在BKPG进行RELOAD时该App不会被注销 而是保持实例不变,状态也都保持。这通常作为服务器服务非常关键,比如想要添加一个指令, 需要RELOAD但是原有服务不能关闭如果设置为true就可以实现保护。

ProcessAppTemplate 为命令执行协议模板为抽象类继承实现了MiniApp接口 用于执行命令行指令需要实现两个接口一个是getName作用同上另外一个是该抽象类 独有的getCmdStr需要设置命令行的完整执行指令。当点击面板的执行按钮时 会启动一个线程来执行该命令并且每5s会检测一次命令心跳如果心跳失去连接 则会释放资源。 如果说有的指令需要在特定目录下执行可以覆盖getRunPath来指定运行环境。 可以作为一些应用或者服务的启动端。

为了更加高效的添加命令(常用), 官方内置了一个命令AppGroup: PLUGIN_BKPG_GROUP_PROCESS 。 通过配置ext/ProgressGroup.yml来添加指令应用 会自动创建多组ProcessAppTemplate。格式参考

processBeanList:
  - name: PING百度
    cmd: ping www.baidu.com
  - name: PING主站
    cmd: ping www.dreamcenter.top
  - name: nginx
    cmd: D:\basic\nginx-1.24.0\nginx
    path: D:\basic\nginx-1.24.0

第三方扩展指南

首先下载BKPG_PROTOCAL协议JAR包引入自己的项目中作为环境依赖。 之后在自己项目中实现MiniApp/MiniAppGroup接口或者ProcessAppTemplate抽象类即可。 将JAR包生成路径配置到ext目录下此时生成JAR包点击主程序系统托盘右键的RELOAD选项 即可看到JAR包中的MiniApp都已经加载完毕了。

你可以参考BKPG_DEMO的项目或者直接套用该demo来架构一个项目。 注意最后打包时不应该包含BKPG_PROTOCAL这个依赖是冗余的建议排除在外。

一个JAR包项目中可以包含多个MiniApp这些MiniApp如果没有特殊机制劫持 最后全部会被装载进入到容器之中。

如果您开发了自己的工具包并且认为非常具有价值你也可以分享自己的JAR包给别人 或者分享给官方由我们加入README进行大众分享。