Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过JMX查看Ehcache数据_Java_Spring_Jmx_Ehcache - Fatal编程技术网

Java 通过JMX查看Ehcache数据

Java 通过JMX查看Ehcache数据,java,spring,jmx,ehcache,Java,Spring,Jmx,Ehcache,有没有办法通过JMX查看存储在ehcache中的数据/对象?我只找到了缓存统计信息,但我需要查看对象结构。如果这是您需要的,您可以构建它,但它在Ehcache JMX实现中不可用。我也不希望这样,因为不知道存储在ehcache中的对象是否可以通过JMX显示。如果您知道它们是,那么您当然可以创建一个MBean,在给定对ehcache CacheManager或Cache的引用的情况下,该MBean可以公开缓存的内容 请记住,除非您使用的是纯内存缓存,否则缓存中的对象可能不在内存中,而是在磁盘上,或

有没有办法通过JMX查看存储在ehcache中的数据/对象?我只找到了缓存统计信息,但我需要查看对象结构。

如果这是您需要的,您可以构建它,但它在Ehcache JMX实现中不可用。我也不希望这样,因为不知道存储在ehcache中的对象是否可以通过JMX显示。如果您知道它们是,那么您当然可以创建一个MBean,在给定对ehcache CacheManager或Cache的引用的情况下,该MBean可以公开缓存的内容

请记住,除非您使用的是纯内存缓存,否则缓存中的对象可能不在内存中,而是在磁盘上,或者,如果您使用的是terracotta,则它们可能在远程服务器上。此外,有时以序列化形式存储java对象更有效。如果这样做,查看数据将需要反序列化

<>如果你只想在调试一个问题时看到这些对象,我会考虑只依赖于一个调试器,就像在IDE中可用的调试器一样。NetBeans和Eclipse都有功能强大的调试器,可用于查看缓存的内容。我经常这样做

既然您将这个问题标记为“spring”,我假设您正在使用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"/>
FooMBean.java:

package com.foo.test;

public interface FooMBean {
  public String getName();
  public void setName(String name);
  public void printName();
}
在本例中,“foo”对象将作为JMX MBean公开,该MBean将具有名为“name”的属性和名为“printName”的操作。MBean的名称将是:“FOO:name=FOO”。您可以自定义所有这些行为。见:

package com.foo.test;

public interface FooMBean {
  public String getName();
  public void setName(String name);
  public void printName();
}