JVM - 在 Spring 应用程序运行时查看 class 字段

JVM - peek at class field during Spring application runtime

最近我需要查看一些 class 字段值。 class 看起来有点像这样:

public class Foo(){

   @Autowired
   protected MessageResolver resolver;

   protected static final String INJECTED_TEXT_PROPERTY_CODE = "code";
   protected String injectedText;

   @PostConstruct
   public void initialize() {
    injectedText = resolver.resolveMessage(INJECTED_TEXT_PROPERTY_CODE);
   }
}

然后我有一些像这样的 属性 来源:

code=injectedCode

现在任务的难点在于它不会在我的机器上,而是在客户端机器上。因此,理想情况下,我需要一些简单的命令来执行,而不会干扰工作系统。

编辑:我想要达到峰值的字段是 injectedText

EDIT2:@apangin 介绍了最有趣的解决方案(离线 jmap 和转储分析)。谢谢!

启动应用程序时,您需要加载客户端计算机的 属性。看这个http://www.baeldung.com/properties-with-spring

此外,您可以使用来自 spring 的 @Value 注释来注入 属性 值

import org.springframework.beans.factory.annotation.Value;

class MyClass {

   @Value("${value.from.property}")
   private String valueFromProperty;

}

正如@apangin 所建议的那样,我使用 jmap 实用程序创建了我的应用程序的堆转储。

首先我必须弄清楚我的应用程序 PID 是什么。我用命令做到了:

jps

然后我创建了我的应用程序的堆转储(我的 PID 是 303):

jmap -dump:live,file=C:\dump.bin 303

最后我用 jhat 工具分析了堆转储:

jhat C:\dump.bin