栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

arthas 执行ognl表达式ClassNotFoundException

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

arthas 执行ognl表达式ClassNotFoundException

1 问题描述

不希望通过编码的方式,想通过arthas 获取spring配置文件的属性值。

参考一篇文章https://my.oschina.net/u/4255537/blog/3357593 根据applicationcontext 工具类获取配置属性的方法。

实际执行时总是报找不到类, 但是通过sc 命令可以找到该类

[arthas@312]$ ognl '#context=@com.xxx.ApplicationContextHelper@appCtx,#context.getEnvironment().getProperty("author")'
Failed to execute ognl, exception message: ognl.OgnlException: Could not get static field appCtx from class com.xxx.ApplicationContextHelper [java.lang.ClassNotFoundException: Unable to resolve class: com.xxx.ApplicationContextHelper], please check $HOME/logs/arthas/arthas.log for more details. 

[arthas@312]$ sc com.xxx.ApplicationContextHelper
com.xxx.ApplicationContextHelper
2 原因分析

搜到了 arthas 对该问题解释,大意是自定义类加载器导致找不到类

https://github.com/alibaba/arthas/issues/71

解决办法:
第一步,查询指定类的classloader信息,命令为:sc -d xxxx,根据结果可以看到类对应classloader的hash值;
第二步,ognl命令指定classloader,命令为:ognl -c xxxx(classloader的hash值) xxx(表达式)

3 解决方案

sc -d com.xxx.ApplicationContextHelper
找到 classLoaderHash 41a2befb

ognl -c 41a2befb ‘#context=@com.xxx.ApplicationContextHelper@appCtx,#context.getEnvironment().getProperty(“druid.datasource.password”)’

4 相关资料

https://github.com/alibaba/arthas/issues/71

https://blog.csdn.net/qq826654664jx/article/details/101512468

https://commons.apache.org/proper/commons-ognl/language-guide.html


**想了解更多开发和避坑技巧,经验,学习方法少走弯路,**欢迎关注本人的慕课专栏:

再学经典:《Effective Java》独家解析

解锁大厂思维:剖析《阿里巴巴 Java 开发手册》

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/236327.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号