有没有办法如何通过JMX查看存储在ehcache中的数据/对象?我发现只是缓存统计信息,但我需要查看对象结构。
答案 0 :(得分:1)
如果这是您需要的东西,您可以构建它,但它在Ehcache JMX实现中不可用。我不希望它是因为不知道存储在ehcache中的对象是否可以通过JMX显示。如果您知道它们是,那么您当然可以创建一个MBean,在给出对ehcache CacheManager或Cache的引用时,可以公开缓存的内容。
请记住,除非您使用的是仅内存缓存,否则缓存中的对象将不在内存中但在磁盘上,或者如果您使用的是赤陶,则它们可能位于远程服务器上。此外,以序列化形式存储java对象有时更有效。如果您这样做,查看数据将需要反序列化。
如果您只是在调试问题时只想看到这些对象,我会考虑只依赖于良好IDE中可用的调试器。 NetBeans和Eclipse都具有能够用于查看缓存内容的调试器。我经常这样做。
因为你用" spring"标记了这个问题。我假设你正在使用弹簧。在春天创建一个MBean非常容易。您只需将导出器bean添加到上下文中,并使您的MBean实现一个与您的对象名称相同的接口,但将MBean添加到结尾。这是一个例子:
的applicationContext.xml:
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"
p:autodetect="true"/>
<bean name="FOO:name=foo" class="com.foo.test.Foo"/>
Foo.java:
package com.foo.test;
public class Foo implements FooMBean {
private String name;
...
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void printName() {
System.out.println(name);
}
}
FooMBean.java:
package com.foo.test;
public interface FooMBean {
public String getName();
public void setName(String name);
public void printName();
}
在这个例子中,&#34; foo&#34;对象将作为JMX MBean公开,该MBean将具有名为&#34; name&#34;的属性。以及名为&#34; printName&#34;的操作。 MBean的名称将是:&#34; FOO:name = foo&#34;。您可以自定义所有这些行为。请参阅:http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#jmx-exporting