java - 通过 JMX 查看 Ehcache 数据

标签 java spring jmx ehcache

有什么方法可以通过 JMX 查看存储在 ehcache 中的数据/对象吗?我只找到缓存统计信息,但我需要查看对象结构。

最佳答案

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

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

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

由于您用“spring”标记了这个问题,我假设您正在使用 spring。在 spring 中创建 MBean 非常容易。您只需将导出器 bean 添加到上下文中,并使您的 MBean 实现一个与您的对象同名的接口(interface),但将 MBean 添加到末尾。这是一个例子:

应用程序上下文.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();
}

在此示例中,“foo”对象将公开为 JMX MBean,该对象将具有名为“name”的属性和名为“printName”的操作。 MBean 的名称将是:“FOO:name=foo”。您可以自定义所有这些行为。请参阅:http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#jmx-exporting

关于java - 通过 JMX 查看 Ehcache 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11308409/

相关文章:

java - 如何让 jconsole 图表显示小数?

java - 如何处理内容提供​​程序内的 SQLiteConstraintException

java - 如何手动更改 DayNight 主题?

java - Multi-Tenancy Spring JPA : Dynamic dialects resolution for dynamic datasources

java - getEhcache() 的 Ehcache NullPointerException

java - JMeter Recording Controller 记录不同格式的请求

java - 常见错误 - org.sqlite.JDBC

java - 如何比较两个日期,如果一个日期小于另一个日期

java - 当集合设置时如何测试 json api

rmi - 远程 JMX 调用上的 NoRouteToHostException/NoSuchHostException