|
|
|
|
|
|
|
演示Arthas里`watch`命令中`ognl`表达式的工作流程。用户可以自己修改`Demo.java`里的表达式,再执行验证。
|
|
|
|
|
|
|
|
项目地址: https://github.com/hengyunabc/ognl-demo
|
|
|
|
# 打开Demo.java文件
|
|
|
|
|
|
|
|
`src/main/java/com/example/ognl/Demo.java`{{open}}
|
|
|
|
|
|
|
|
# 编译运行代码
|
|
|
|
|
|
|
|
`mvn compile exec:java`{{execute}}
|
|
|
|
|
|
|
|
|
|
|
|
输出结果包含`ognl`表达式输出结果:
|
|
|
|
|
|
|
|
```java
|
|
|
|
AtEnter, conditionExpress: params[0] > 1, conditionResult: true
|
|
|
|
@ArrayList[
|
|
|
|
@TestService[
|
|
|
|
],
|
|
|
|
@Object[][
|
|
|
|
@Integer[1000],
|
|
|
|
@String[hello],
|
|
|
|
@Student[
|
|
|
|
id=@Long[1],
|
|
|
|
name=@String[tom],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
]
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
以上输出结果,对应在代码里的表达式是:
|
|
|
|
|
|
|
|
```java
|
|
|
|
String watchExpress = "{target, params, returnObj, #cost}";
|
|
|
|
String conditionExpress = "params[0] > 1 && #cost > 0.1";
|
|
|
|
```
|
|
|
|
|
|
|
|
类似在arthas里执行下面的`watch`命令:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
watch com.example.ognl.TestService test "{target, params, returnObj, #cost}" "params[0] > 1 && #cost > 0.1" -x 3
|
|
|
|
```
|
|
|
|
|
|
|
|
# 查看函数抛出异常时的表达式结果
|
|
|
|
|
|
|
|
`mvn compile exec:java -DexceptionCase=true`{{execute}}
|
|
|
|
|
|
|
|
|
|
|
|
The output:
|
|
|
|
|
|
|
|
```java
|
|
|
|
AtExceptionExit, conditionExpress: params[0] > 1, conditionResult: true
|
|
|
|
@ArrayList[
|
|
|
|
@TestService[
|
|
|
|
],
|
|
|
|
@Object[][
|
|
|
|
@Integer[1000],
|
|
|
|
@String[hello],
|
|
|
|
@Student[com.example.ognl.Student@6e23bcdd],
|
|
|
|
],
|
|
|
|
java.lang.IllegalArgumentException: error
|
|
|
|
at com.example.ognl.TestService.test(TestService.java:12)
|
|
|
|
at com.example.ognl.Demo.test(Demo.java:43)
|
|
|
|
at com.example.ognl.Demo.main(Demo.java:20)
|
|
|
|
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254)
|
|
|
|
at java.base/java.lang.Thread.run(Thread.java:832)
|
|
|
|
,
|
|
|
|
]
|
|
|
|
```
|
|
|
|
|
|
|
|
代码里的表达式:
|
|
|
|
|
|
|
|
```java
|
|
|
|
String watchExpress = "{target, params, throwExp}";
|
|
|
|
String conditionExpress = "params[0] > 1";
|
|
|
|
```
|
|
|
|
|
|
|
|
类似在arthas里执行下面的`watch`命令:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
watch com.example.ognl.TestService test "{target, params, throwExp}" "params[0] > 1" -e -x 2
|
|
|
|
```
|