package com.test.i18n;
public class I18nRes {
private static final Logger LOGGER = LoggerFactory.getLogger(I18nRes.class);
// 存放语言资源 Map<appId,Map<key,Map<lang,value>>,对app下的key值做唯一性校验
private static Map<String, Map<String, Map<String, String>>> i18nResList = new HashMap<String, Map<String, Map<String, String>>>();
public static Map<String, Map<String, Map<String, String>>> i18nMicroResList = new HashMap<>();
// 文件对应的修改时间,用于支持scanner
private static Map<String, Long> _fileInfo = new HashMap<String, Long>();
// 存储文件对应 的key Map<path,List<key>>
private static Map<String, List<String>> keys = new HashMap<String, List<String>>();
public static Map<String, Long> getFileInfo() {
return _fileInfo;
}
}
2.静态变量查看
2.1普通查看
getstatic com.test.i18n.I18nRes i18nResList -x 3
2.2高级查看
2.2.1启动 Arthas 并连接到 JVM:
java -jar arthas-boot.jar
2.2.2 查找目标类的信息:
sc -d com.test.i18n.I18nRes # 全类名
得到类加载器 ID 507b79f7,如果有多个类加载器,使用第一个。
2.2.3使用 ognl 命令获取键集合:
ognl -c 507b79f7 '@com.test.i18n.I18nRes@i18nResList.keySet()'
ognl -c 23f72d88 '@com.test.i18n.I18nRes@i18nResList.keySet()'
2.2.4使用 ognl 命令获取某个键对应的值:
ognl -c 507b79f7 '@com.test.i18n.I18nRes@i18nResList.get("someKey").get("nestedKey1").get("nestedKey2")'
ognl -c 23f72d88 '@com.test.i18n.I18nRes@i18nResList.get("com.crmpaas.apps.sales")'
3执行方法
3.1 执行静态方法
示例代码
package com.test.sdk.local;
@Component
public class SDK {
private static final Logger LOGGER = LoggerFactory.getLogger(SDK.class);
/**
* 引擎版本号
*/
public static String getVersion() {
return AWSServerEngineConfiguration.getBpmnEngineVersion();
}
}
3.1.1查找目标类:
在 Arthas 命令行界面中,使用 sc(search class)命令来查找目标类 com.test.sdk.local.SDK:
sc -d com.test.sdk.local.SDK
3.1.2查找目标方法:
使用 sm(search method)命令来查找目标类中的目标方法 getPlatformAPI:
sm com.test.sdk.local.SDK
这将列出 SDK 类中的所有方法,你可以找到 getPlatformAPI 方法的具体信息。
3.1.3调用静态方法:
使用 ognl(Object-Graph Navigation Language)命令来调用静态方法 getPlatformAPI。OGNL 是 Arthas 提供的一种表达式语言,可以用于操作 Java 对象。
ognl -c xxxxx '@com.test.sdk.local.SDK@getPlatformAPI()'
这里的 @ 符号表示静态方法调用。 -c 指定类加载器 ognl 命令将执行这个方法并打印结果。
[arthas@11]$ sc -d com.test.sdk.local.SDK
class-info com.test.sdk.local.SDK
code-source /data/aws/bin/lib/aws-sdk-7.0.4.jar
name com.test.sdk.local.SDK
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name SDK
modifier public
annotation org.springframework.stereotype.Component
interfaces
super-class +-java.lang.Object
class-loader +-startJarLoader@7abe27bf
+-jdk.internal.loader.ClassLoaders$AppClassLoader@311d617d
+-jdk.internal.loader.ClassLoaders$PlatformClassLoader@4925f4f5
classLoaderHash 7abe27bf
Affect(row-cnt:1) cost in 159 ms.
[arthas@11]$ ognl -c 7abe27bf '@com.test.sdk.local.SDK@getPlatformAPI()'
@PlatformAPIImpl[
]
[arthas@11]$ sm com.test.sdk.local.SDK
com.test.sdk.local.SDK <init>()V
com.test.sdk.local.SDK getVersion()Ljava/lang/String;
com.test.sdk.local.SDK getAppAPI()Lcom/test/sdk/local/api/AppAPI;