托管 bean 是一种 Java bean。它专门用于 JMX 技术,它是使用 依赖注入 (DI) 技术创建的。在 JMX 中,资源表示为 托管 bean (MBean)。这些托管 bean 向核心托管 bean 服务器注册。因此,可以将托管 bean 可视化为 Java 服务、组件或设备的包装器。由于所有托管组件都向 MBeans 服务器注册,因此它用于管理所有托管 bean。托管 bean 服务器允许服务器组件连接并查找托管 bean。典型的 JMX 代理由托管 bean 服务器和与托管 bean 交互所需的服务组成。
JMX 规范描述了标准连接器。这些连接器也称为 JMX 连接器。 JMX 连接器允许我们从远程管理应用程序访问 JMX 代理。连接器可以使用不同的协议来使用相同的管理接口。
以下是应该使用 JMX 的原因:
- It provides a way to manage applications on different devices
- It provides a standard way to manage Java applications and networks
- It can be used to manage JVM
- It provides a scalable and dynamic management interface
有了对 JMX 的基本了解,让我们继续检查 Spring 是如何支持它的。 Spring 的 JMX 支持使我们能够非常轻松地将 Spring 应用程序转换为 JMX 架构。
以下是 Spring 的 JMX 支持提供的特性:
- Automatic registration of a Spring bean as a managed bean
- A flexible structure for controlling the management interface for Spring beans
- A declarative approach for managed beans over remote connectors
- Proxying of local and remote managed bean resources
这些特性在不与 Spring 或 JMX 的类或接口耦合的情况下工作。 Spring JMX 支持有一个名为 MBeanExporter 的类。此类负责收集 Spring bean 并将它们注册到托管 bean 服务器。
下面是一个 Spring bean 的示例:
为了将此 bean 及其属性公开为托管属性和操作,应在配置文件中进行以下配置:
从前面的配置中,要查找的一个重要 bean 定义是 exporter bean。导出器 bean 的 beans 映射属性指示 Spring bean 作为 JMX bean 公开给 JMX 管理的 bean 服务器。
使用上述配置,假定托管 bean 服务器必须运行在 Spring 应用程序可访问的环境中。如果托管 bean 服务器或 MBeanServer 正在运行,Spring 将尝试找到它并注册所有 bean。当应用程序在具有捆绑 MBeanServer 的 Tomcat 或 IBM WebSphere 中运行时,此默认行为很有用。
在其他情况下,我们必须创建一个 MBeanServer 实例,如下所示:
我们必须在 MBeanExporter bean 上指定服务器属性,以将其与已创建的 MBeanServer 相关联。
随着 JDK 5.0 中注解的出现,Spring 启用了设置注解以将 Spring bean 注册为 JMX bean 的规定。
以下是使用 @ManagedResource 注释定义的示例 Calculator bean:
@ManagedAttribute 和 @ManagedOperation 注释用于公开 bean 属性和方法来管理 bean 服务器。
以下是实例化托管 bean 的客户端代码,可以通过 JConsole 或 VisualVM 等工具进行监控:
一旦暴露为托管 bean,就可以使用 JConsole 或 VisualVM 等工具监控这些资源的各种参数,例如对象数量、对象占用的内存以及对象占用的堆内存空间。
以下是 Java VisualVM 的屏幕截图,突出显示了 Calculator 作为托管 bean: