文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Jarboot:一个强大的Java进程管理工具

2024-12-02 11:16

关注

[[443204]]

在测试环境、每日构建的集成环境,可以把一系列编译输出等jar文件放入约定的目录,由Jarboot提供友好的浏览器ui界面和http接口,统一管理它的启动、停止及状态的监控,以及执行命令对目标进程进行调试。

技术背景及目标

Jarboot 使用Java Agent和ASM技术往目标Java进程注入代码,无业务侵入性,注入的代码仅用于和 Jarboot 的服务实现命令交互,部分命令会修改类的字节码用于类增强,加入了与Arthas类似的命令系统,如获取JVM信息、 监控线程状态、获取线程栈信息等。

架构简介 

模块关系 

序列图 

安装或编译构建

使用Docker

  1. sudo docker run -itd --name jarboot -p 9899:9899 mazheng0908/jarboot 

编译源码的步骤

使用压缩包安装或者Docker的时候忽略此步骤

编译Jarboot源代码 

  1. #首先编译前端 
  2. $ cd jarboot-ui 
  3. #首次时需要先安装依赖,执行yarn或npm install 
  4. $ yarn 
  5.  
  6. #执行编译,yarn build或npm run build,开发模式可执行yarn start或npm run start 
  7. $ yarn build 
  8.  
  9. #切换到代码根目录,编译Java代码 
  10. $ cd ../ 
  11. $ mvn clean install 

启动Jarboot服务 

  1. #执行 startup.sh 启动, 在Windows系统上使用startup.cmd。 
  2. $ sh startup.sh 

进入登录界面,初始的用户名:jarboot,默认密码:jarboot

SpringBoot应用

引入spring-boot-starter-jarboot依赖 

  1.  
  2.     io.github.majianzheng 
  3.     spring-boot-starter-jarboot 
  4.     ${jarboot.version} 
  5.  

实现CommandProcessorSPI接口

同样的, 你也可以在方法上使用 @Bean 注解来定义命令处理器。

如果没有使用@Name注解的话,将会默认使用Bean的名称作为命令的名称。 

  1. @Name("spring.command.name"
  2. @Summary("The command summary"
  3. @Description("The command usage detail"
  4. @Component 
  5. public class DemoServiceImpl implements DemoService, CommandProcessor { 
  6.   @Override 
  7.   public String process(CommandSession session, String[] args) { 
  8.     return "Spring boot Demo user-defined command using Spring SPI"
  9.   } 
  10.   //implement other method... 

当引入了spring-boot-starter-jarboot依赖后,将会增加2个Spring调试命令,spring.bean和spring.env。 

  1. #spring.bean 用法: 
  2. $ spring.bean [-b <name>] [-d] 
  3. #示例: 
  4. # 获取所有的bean name 
  5. $ spring.bean 
  6. # 获取bean的信息 
  7. $ spring.bean -b beanName 
  8. # 获取bean的详细信息 
  9. $ spring.bean -b beanName -d 
  10.  
  11. #sping.env 用法: 
  12. $ spring.env <name
  13. #示例: 
  14. $ spring.env spring.application.name 

如何创建一个用户自定义的命令

引入jarboot api的依赖

  1.  
  2.     io.github.majianzheng 
  3.     jarboot-api 
  4.     provided 
  5.     ${jarboot.version} 
  6.  

实现spi接口 

  1.  
  2. @Name("demo"
  3. @Summary("The command summary"
  4. @Description("The command usage detail"
  5. public class DemoCommandProcessor implements CommandProcessor { 
  6.     @Override 
  7.     public String process(CommandSession session, String[] args) { 
  8.         return "demo SPI command result."
  9.     } 

创建JDK的spi定义文件

在目录resources/META-INF/services中创建名为 com.mz.jarboot.api.cmd.spi.CommandProcessor的文件,内容为类的全名。 

  1. public class DemoApplication { 
  2.     public static void main(String[] args) { 
  3.         // do something 
  4.         try { 
  5.             //Notify completion 
  6.             JarbootFactory.createAgentService().setStarted(); 
  7.         } catch (Exception e) { 
  8.             log(e.getMessage()); 
  9.         } 
  10.     } 

 

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯