|
对于最新的稳定版本,请使用 Spring Framework 6.2.7! |
控制ObjectNameBean 的实例
在幕后,MBeanExporterdelegates 的ObjectNamingStrategy要获取ObjectNameinstance 来注册它的每个 bean。
默认情况下,默认实现KeyNamingStrategy使用beans Map作为ObjectName.此外,KeyNamingStrategy可以映射 key
的beans Map发送到Properties文件(或多个文件)解析ObjectName.除了KeyNamingStrategy,Spring 提供了两个额外的ObjectNamingStrategyimplementations: 的IdentityNamingStrategy(这会构建一个ObjectName基于 Bean 的 JVM 标识),并且MetadataNamingStrategy(其中
使用源级元数据来获取ObjectName).
读数ObjectNameProperties 中的实例
您可以配置自己的KeyNamingStrategy实例并将其配置为读取ObjectName实例Properties实例,而不是使用 Bean 键。这KeyNamingStrategy尝试在Properties带密钥
对应于 Bean 键。如果未找到条目,或者Propertiesinstance 为null,则使用 Bean 键本身。
以下代码显示了KeyNamingStrategy:
<beans>
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="testBean" value-ref="testBean"/>
</map>
</property>
<property name="namingStrategy" ref="namingStrategy"/>
</bean>
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
<property name="name" value="TEST"/>
<property name="age" value="100"/>
</bean>
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.KeyNamingStrategy">
<property name="mappings">
<props>
<prop key="testBean">bean:name=testBean1</prop>
</props>
</property>
<property name="mappingLocations">
<value>names1.properties,names2.properties</value>
</property>
</bean>
</beans>
前面的示例将KeyNamingStrategy替换为Properties实例,该实例
从Properties实例由 mapping 属性定义,并且
properties 文件位于 mappings 属性定义的路径中。在这个
configuration 中,使用testBeanbean 被赋予一个ObjectName之bean:name=testBean1,
由于这是Properties实例,该实例具有对应于
Bean 键。
如果Propertiesinstance 中,bean 键名用作
这ObjectName.
用MetadataNamingStrategy
MetadataNamingStrategy使用objectName属性的ManagedResource属性来创建ObjectName.以下代码显示了
Configuration 的MetadataNamingStrategy:
<beans>
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="testBean" value-ref="testBean"/>
</map>
</property>
<property name="namingStrategy" ref="namingStrategy"/>
</bean>
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
<property name="name" value="TEST"/>
<property name="age" value="100"/>
</bean>
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
<property name="attributeSource" ref="attributeSource"/>
</bean>
<bean id="attributeSource"
class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
</beans>
如果没有objectName已为ManagedResource属性、ObjectName使用以下
格式:[fully-qualified-package-name]:type=[short-classname],name=[bean-name]。为
example,生成的ObjectName对于下面的 bean,将是com.example:type=MyClass,name=myBean:
<bean id="myBean" class="com.example.MyClass"/>
配置基于注释的 MBean 导出
如果您更喜欢使用基于注释的方法来定义
您的管理接口,即MBeanExporter可用:AnnotationMBeanExporter.定义此子类的实例时,您不再需要namingStrategy,assembler和attributeSource配置
由于它始终使用基于 Java 注释的标准元数据(autodetection 为
也始终启用)。事实上,与其定义MBeanExporterbean,一个偶数
simpler 语法由@EnableMBeanExport @Configuration注解
如下例所示:
@Configuration
@EnableMBeanExport
public class AppConfig {
}
如果您更喜欢基于 XML 的配置,则<context:mbean-export/>元素为
相同的目的,如下面的清单所示:
<context:mbean-export/>
如有必要,您可以提供对特定 MBean 的引用server和defaultDomain属性(AnnotationMBeanExporter) 接受替代项
生成的 MBean 的值ObjectName域。这用于代替
完全限定的包名称,如上一节所述 MetadataNamingStrategy,如下例所示:
@EnableMBeanExport(server="myMBeanServer", defaultDomain="myDomain")
@Configuration
ContextConfiguration {
}
以下示例显示了前面基于注释的示例的 XML 等效项:
<context:mbean-export server="myMBeanServer" default-domain="myDomain"/>
不要将基于接口的 AOP 代理与 JMX 的自动检测结合使用
Bean 类中的注解。基于接口的代理 “隐藏” 目标类,该类
还会隐藏 JMX 托管的资源注释。因此,您应该在该
case (通过在<aop:config/>,<tx:annotation-driven/>等等)。否则,您的 JMX bean 可能会在
启动。 |