Arthas 提供了 ognl 命令,用于执行 OGNL 表达式来调用方法,包括含有 DTO 参数的方法。以下是在 Arthas 中使用 ognl 命令的步骤:
连接到目标 Java 进程:首先,使用 as.sh 或 as.bat 启动 Arthas 命令行工具,并连接到目标 Java 进程,方法与上一个回答中描述的一样。
使用 ognl 命令:使用 ognl 命令来执行 OGNL 表达式。您需要构建一个包含 DTO 参数的 OGNL 表达式,然后使用该表达式来调用方法。例如:
less
$ ognl -c 18b4aac2 '#context=@com.zhumeng.springstudy.module.util.SpringContextUtil@getApplicationContext(),#dto=new com.zhumeng.springstudy.module.service.pojo.dto.UserDTO("1","test2", "30",null,null),#context.getBean("userServiceImpl").updateUserById("1",#dto)' -x 2
$ ognl -c 18b4aac2 '#context=@com.zhumeng.springstudy.module.util.SpringContextUtil@getApplicationContext(),#dto=new com.zhumeng.springstudy.module.service.pojo.dto.UserDTO("1","test2", "30",null,null),#dto.set#context.getBean("userServiceImpl").updateUserById("1",#dto)' -x 2
在这个示例中,可以有两种方式,一种是利用全参构造,来创建并赋值给dto,另一种则是先创建dto,然后调用set方法去设置属性
查看结果:Arthas 会执行 OGNL 表达式,并显示调用方法的结果。
请注意,OGNL 表达式的构建方式可能会因应用程序的结构和需求而有所不同。确保您了解 DTO 对象的结构和方法的参数要求,以正确构建 OGNL 表达式。 Arthas 的官方文档和在线教程也提供了更多关于如何使用 ognl 命令的信息。