Arthas 临时执行线上 SpringBoot 项目Jar包的静态方法

目标:
    使用 Arthas 执行 SpringBoot 项目 Jar 包中 com.kwok.schedule.task.ESHisIndexParseTask 类中 parse() 静态方法。

注:
    由于 SpringBoot 项目 Jar 包 ClassLoader 为 org.springframework.boot.loader.LaunchedURLClassLoader,而 Arthas 默认的是 SystemClassLoader,在使用 Arthas 中 ognl 命令时需要指定加载目标类的 ClassLoader。

1.获取目标类的 ClassLoader 的 hashcode 两种方式

①方式一:sc 命令

命令:sc -d com.kwok.schedule.task.ESHisIndexParseTask

Arthas 临时执行线上 SpringBoot 项目Jar包的静态方法_第1张图片

②方式二:sm 命令

命令:sm -d com.kwok.schedule.task.ESHisIndexParseTask parse

Arthas 临时执行线上 SpringBoot 项目Jar包的静态方法_第2张图片


2.如果步骤1中返回信息:Affect(row-cnt:0),则表示该类还未执行加载,需要使用 classloader 命令加载该类后执行该类静态方法,反之直接进行步骤3。

①在加载器列表中找到 org.springframework.boot.loader.LaunchedURLClassLoader 加载器的 hash。

命令:classloader -l

②使用 SpringBoot 类加载器加载目标类。

命令:classloader -c 31cefde0 --load com.kwok.schedule.task.ESHisIndexParseTask


3.执行ognl表达式

命令:ognl -c 31cefde0 '@com.kwok.schedule.task.ESHisIndexParseTask@parse()'

返回信息(返回值):
null

 

你可能感兴趣的:(Java,SpringBoot,Arthas)