此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
控制ObjectName
Bean 的实例
在幕后,MBeanExporter
委托到ObjectNamingStrategy
获取ObjectName
实例。
默认情况下,默认实现KeyNamingStrategy
使用beans
Map
作为ObjectName
.此外,KeyNamingStrategy
可以映射键
的beans
Map
到Properties
文件(或多个文件)来解析ObjectName
.除了KeyNamingStrategy
,Spring 提供了两个额外的ObjectNamingStrategy
实现:IdentityNamingStrategy
(它构建了一个ObjectName
基于 bean 的 JVM 身份)和MetadataNamingStrategy
(其中
使用源级元数据获取ObjectName
).
读数ObjectName
属性中的实例
您可以配置自己的KeyNamingStrategy
实例并将其配置为读取ObjectName
实例来自Properties
实例,而不是使用 Bean 键。这KeyNamingStrategy
尝试在Properties
带钥匙
对应于 Bean 键。如果未找到条目,或者如果Properties
实例是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
由映射属性定义的实例和
属性文件,位于 mappings 属性定义的路径中。在这个
配置,则testBean
bean 被赋予一个ObjectName
之bean:name=testBean1
,
由于这是Properties
实例,该实例具有对应于
豆钥匙。
如果Properties
实例,则 bean 键名称用作
这ObjectName
.
用MetadataNamingStrategy
MetadataNamingStrategy
使用objectName
属性的ManagedResource
属性以创建ObjectName
.以下代码显示了
配置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
使用以下内容创建
format: [fully-qualified-package-name]:type=[short-classname],name=[bean-name]。为
示例,生成的ObjectName
因为下面的 bean 将是com.example:type=MyClass,name=myBean
:
<bean id="myBean" class="com.example.MyClass"/>
配置基于注释的 MBean 导出
如果您更喜欢使用基于注释的方法来定义
您的管理界面,一个方便的子类MBeanExporter
可用:AnnotationMBeanExporter
.定义此子类的实例时,不再需要namingStrategy
,assembler
和attributeSource
配置
因为它始终使用基于 Java 注释的标准元数据(自动检测是
也始终启用)。事实上,与其定义MBeanExporter
bean,一个偶数
更简单的语法支持@EnableMBeanExport
@Configuration
注释或<context:mbean-export/>
元素,如以下示例所示:
-
Java
-
Kotlin
-
Xml
@Configuration
@EnableMBeanExport
public class JmxConfiguration {
}
@Configuration
@EnableMBeanExport
class JmxConfiguration
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:mbean-export/>
</beans>
如有必要,可以提供对特定 MBean 的引用server
和defaultDomain
属性(属性AnnotationMBeanExporter
) 接受替代
生成的 MBean 的值ObjectName
域。这用于代替
完全限定的包名称,如上一节 MetadataNamingStrategy 所述,如以下示例所示:
-
Java
-
Kotlin
-
Xml
@Configuration
@EnableMBeanExport(server="myMBeanServer", defaultDomain="myDomain")
public class CustomJmxConfiguration {
}
@Configuration
@EnableMBeanExport(server="myMBeanServer", defaultDomain="myDomain")
class CustomJmxConfiguration
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:mbean-export server="myMBeanServer" default-domain="myDomain"/>
</beans>
不要将基于接口的 AOP 代理与 JMX 的自动检测结合使用
注解。基于接口的代理“隐藏”了目标类,这
还隐藏了 JMX 管理的资源注释。因此,您应该在其中使用目标类代理
case(通过将 'proxy-target-class' 标志设置为<aop:config/> ,<tx:annotation-driven/> 等等)。否则,您的 JMX Bean 可能会被静默忽略
启动。 |