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

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的Jarboot 是一个Java进程启停、管理、诊断的平台,可以管理、守护、监控及诊断本地和远程的Java进程。

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

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

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

技术背景及目标

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

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

架构简介

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

模块关系

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

序列图

安装或编译构建

使用Docker

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

编译源码的步骤

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

编译Jarboot源代码

#首先编译前端
$ cd jarboot-ui
#首次时需要先安装依赖,执行yarn或npm install
$ yarn

#执行编译,yarn build或npm run build,开发模式可执行yarn start或npm run start
$ yarn build

#切换到代码根目录,编译Java代码
$ cd ../
$ mvn clean install

启动Jarboot服务

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

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

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

SpringBoot应用


    io.github.majianzheng
    spring-boot-starter-jarboot
    ${jarboot.version}

同样的, 你也可以在方法上使用 @Bean 注解来定义命令处理器。
如果没有使用@Name注解的话,将会默认使用Bean的名称作为命令的名称。

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

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

#spring.bean 用法:
$ spring.bean [-b ] [-d]
#示例:
# 获取所有的bean name
$ spring.bean
# 获取bean的信息
$ spring.bean -b beanName
# 获取bean的详细信息
$ spring.bean -b beanName -d

#sping.env 用法:
$ spring.env 
#示例:
$ spring.env spring.application.name

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


    io.github.majianzheng
    jarboot-api
    provided
    ${jarboot.version}
/**
 * 使用Name注解来定义一个命令的名字
 */
@Name("demo")
@Summary("The command summary")
@Description("The command usage detail")
public class DemoCommandProcessor implements CommandProcessor {
    @Override
    public String process(CommandSession session, String[] args) {
        return "demo SPI command result.";
    }
}

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

public class DemoApplication {
    public static void main(String[] args) {
        // do something
        try {
            //Notify completion
            JarbootFactory.createAgentService().setStarted();
        } catch (Exception e) {
            log(e.getMessage());
        }
    }
}

更多内容:https://gitee.com/majz0908/jarboot

展开阅读全文

页面更新:2024-02-01

标签:进程   注解   管理工具   界面   接口   命令   强大   定义   目标   代码   文件   内容

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top