db2中count(*) as cnt_arthas中使用ognl

f1a46813312e463ed7a6498ffd80d617.png

arthas简介请参考java 诊断工具--arthas,或移步arthas官网。arthas中很多命令都能使用到ognl,为了方便练习,特选用 watch 命令来练习,官方文档: https://alibaba.github.io/arthas/ognl.html 。

用例项目xw-mail( https://gitee.com/xzbd/xw-mail ),用例接口为用户列表代码如下,入参是params(map),出参是java对象PageUtil,相关代码如下:

@GetMapping("/list")@ResponseBodyPageUtils list(@RequestParam Map params) {   // 查询列表数据      Query query = new Query(params);     List sysUserList = userService.list(query);  int total = userService.count(query);  PageUtils pageUtil = new PageUtils(sysUserList, total);  return pageUtil; }
53d05b03fb9c3921137aacb3651a78a2.png

图1-PageUtil代码

准备好环境,启动项目xw-mail和arthas。

589d1639e343119d96fbb7356882efe2.png

图2-准备好环境

使用命令监控用户列表的list方法的参数,访问后如下图所示:

0b69e87c726885ea2c7f4be6f0b13844.png

从图上看出监控到的 params 被封装在一个object数组中,数组中的元素依然是map。注意:arthas命令watch的参数params并不是要与监控方法llst定义的参数名params相同,这里只是巧合。arthas命令watch命令使用的params是自己内置的,类似的参数还有throwExp,returnObj,详细见官方文档 https://alibaba.github.io/arthas/watch.html 。

  • ognl 自定义变量:将参数自定义为变量p
804089b12e72650dd311d5179e5e8b0e.png
  • 获得数组的大小
6cf8bd203c34cdf83bd028ebe238572e.png
  • 判断数字大小,并做处理(三元运算符)
9db2b3a1c94fdfec2cb05eac97be2d87.png
  • 获取数组中第n个元素:取自定义变量p中的第一个元素
8a99df3063e9c57ceae40c1ecaa1765c.png
  • 获取map中的元素:取limit的值
2dba70be39317533644438bb6fea01d1.png
  • 获取方法返回值
8cac65bc4cec87489671569943319835.png

监控 list 方法的返回值,可以看到返回的是PageUtils,属性 total 和 rows 。因为设置了 -x 3 ,所以UserDo也格式化输出了。

  • 获取对象属性(取第一个对象的 name 值)
09722f32a8b07ad3b6cf6526d98c49c1.png
d8abcbd8e215d9ffc75de9799321735c.png

ognl 命令相关:

  • 自定义数组
# 定义数组【“xzbd”,"abcd"】,判断是否存在 "xzbd",并打印出结果[arthas@26209]$ ognl -x 2  "#value={'xzbd','abcd'}, {'xzbd' in #value} ? 'yes':'no' "@String[yes]
  • 查看静态属性值
# ognl 因为classloader的原因,失败,[arthas@31486]$ ognl "@com.xzbd.common.config.Constant@DEMO_ACCOUNT"# 参考文章 https://cloud.tencent.com/developer/article/1531452​# 使用过 getstatic 能成功[arthas@31486]$ getstatic "com.xzbd.common.config.Constant" "LOG_ERROR"field: LOG_ERROR@String[error]Affect(row-cnt:1) cost in 6 ms.
  • 调用静态方法
ognl '#val=@java.lang.System@currentTimeMillis()'@Long[1578733049112]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值