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

②方式二:sm 命令

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


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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章