携手创作,共同成长!这是我参加「日新计划 8 月更文应战」的第29`天

还不了解Arthas怎么装置发动的能够翻阅 【Arthas】初始Arthas,装置运用 本文一切的履行命令,能够把项目 Althas(阿尔萨斯)学习 拉到本地发动之后,都能够直接履行

【Arthas】命令之ognl使用姿势

Althas中的OGNL运用姿态

从3.0.5版本增加 Althas支持ognl的格局

参数阐明

参数名称 参数阐明
express 履行的表达式
[c:] 履行表达式的 ClassLoader 的 hashcode,默认值是SystemClassLoader
[x] 成果目标的打开层次,默认值1 (如果目标里边包好目标,这个值大一点能够一起输出)

运用示例


1.调用静态特点

ognl '@全途径类目@静态特点名'

示例: ognl '@com.shirc.arthasexample.ognl.OgnlTest@static_str'

【Arthas】命令之ognl使用姿势

2.调用静态办法

ognl '@全途径类目@静态办法名("参数")'

示例一: 简略入参 回来一般目标 ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18)' -X 1

【Arthas】命令之ognl使用姿势

示例二:简略入参 回来目标中包括目标和List ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18,2)' -x 1

【Arthas】命令之ognl使用姿势
-x 1 中的x是小写; 上面能够看到 child目标和childs列表都没有打印出来 试试 -x 2-x 3
【Arthas】命令之ognl使用姿势
-x 2 的时分目标特点有打开,可是列表没有, -x 3 才把列表打开了

示例三: 办法A的回来值作为办法B的入参

ognl '#value1=@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18), #value2=@com.shirc.arthasexample.ognl.OgnlTest@setPerson(#value1) ,{#value1,#value2}' -x 2

【Arthas】命令之ognl使用姿势
示例四:履行多行表达式,赋值给暂时变量,回来一个List:

$ ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'
@ArrayList[
    @String[/opt/java/8.0.181-zulu/jre],
    @String[OpenJDK Runtime Environment],
]

示例五: 办法入参是简略类型列表

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getChilds({"jinjidelaomanong","jjdlmn"})' -x 2

【Arthas】命令之ognl使用姿势
示例六: 办法入参是一个杂乱目标

先用构造函数构造一个目标 ognl 'new com.shirc.arthasexample.ognl.Shirc("jjdlmn",true)' 然后把这个目标作为入参传入;所以终究能够这么写 ognl '#obj=new com.shirc.arthasexample.ognl.Shirc("jjdlmn",true),@com.shirc.arthasexample.ognl.OgnlTest@inputObj(#obj)' -x 2

【Arthas】命令之ognl使用姿势

示例七: 办法入参是一个Map目标

先构造一个Map目标能够这样 ognl '#{ "foo" : "foo value", "bar" : "bar value" }' 然后把这个目标赋值给一个变量; 终究把这个变量作为入参传入; 然后把这个目标作为入参传入;所以终究能够这么写

ognl '#inputmap=#{ "foo" : "foo value", "bar" : "bar value" }, @com.shirc.arthasexample.ognl.OgnlTest@getMap(#inputmap)' -x 2

【Arthas】命令之ognl使用姿势

3.读取不同类型的值

读取 杂乱目标、List、Map等等值的办法

示例一:拜访杂乱目标特点

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getPerson("src",18).name' -x 4

【Arthas】命令之ognl使用姿势

示例二、拜访List或许数组类型

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getChilds({"jinjidelaomanong","jjdlmn"})[0]' -x 2

【Arthas】命令之ognl使用姿势

示例三: 拜访Map目标

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"]' -x 2

ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"].sex' -x 2 shirc: 是map的key; 记住要用双引号”” 引起来

【Arthas】命令之ognl使用姿势

Ognl 常用用法阐明

#变量引证 #this 当时目标

OGNL的变量计划很简略, 你能够用变量来保存中间成果, 并在后边的代码中再次拜访它, 也能够用变量来使整个表达式愈加简略易懂. OGNL中的一切变量, 对整个表达式都是全局可见的. 引证变量的办法是在变量名之前加上 # 号 OGNL在核算表达式的过程中, 随时会将当时目标保存在 "this"变量中, 这个变量也能够象其他任何变量相同引证,用 #this 表明当时目标

例如: ognl '@com.shirc.arthasexample.ognl.OgnlTest@getMap()["shirc"].(#this.sex=="boy"?"BoyNB":"GirlNB")' -x 2

【Arthas】命令之ognl使用姿势

调用构造办法

new 全途径类名()

ognl 'new com.shirc.arthasexample.ognl.Shirc("shirc",true)'

【Arthas】命令之ognl使用姿势

搜集特殊运用姿态

如果有想要实现的姿态,欢迎留言,博主会把表达式更新到文章中;

参考资料


  1. ognl运用手册