Java 导出带有Spring JMX注释的对象
我试图用SpringJMX注释驱动导出一些信息(我没有xml:D)。我已经能够导出字符串和整数类型,但是我还不能导出我创建的类的任何对象 这是我的@Configuration类Java 导出带有Spring JMX注释的对象,java,spring,annotations,jmx,Java,Spring,Annotations,Jmx,我试图用SpringJMX注释驱动导出一些信息(我没有xml:D)。我已经能够导出字符串和整数类型,但是我还不能导出我创建的类的任何对象 这是我的@Configuration类 @Configuration @EnableMBeanExport @ComponentScan({"my.packages"}) public class AppManager { public static void main(String[] args) { AnnotationConf
@Configuration
@EnableMBeanExport
@ComponentScan({"my.packages"})
public class AppManager {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(AppManager.class);
context.refresh();
try {
TimeUnit.MINUTES.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Bean(name = "jmxExporter")
public Exporter jmxExporter() {
return new Exporter();
}
}
这是一个类,我有一些属性,我想得到
public class MyClass implements Serializable {
private int param1;
private int param2;
private int param3;
public MyClass() {
// calculate all params
}
public int getParam1() {
return this.param1;
}
public int getParam2() {
return this.param2;
}
public int getParam3() {
return this.param3;
}
}
这是导出其属性的类
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;
@ManagedResource(objectName = "my.packages:type=JMX,name=Exporter")
public class Exporter {
@ManagedAttribute
public String getString() { //This works!
return "Test string";
}
@ManagedAttribute
public MyClass getMyClass() { //This does not work
return new MyClass();
}
}
我每次都需要创建MyClass对象,因为它有一些我无法单独导出的实时信息
在JConsole中,属性的值为“不可用”
我是JMX的新手,显然错过了一些东西
谢谢你的帮助 我通过返回CompositeData解决了这个问题
@ManagedAttribute
public CompositeData getMyClass() {
return createCompositeDataForMyClass();
}
我为此建立了一个复合的数据支持,它成功了
return new CompositeDataSupport(compositeType, itemNames, itemValues);
其中compositeType是compositeType,ItemName是字符串[],itemValues是对象[]
CompositeType可以用这样的东西构建
new CompositeType(typeName, typeDescription, itemNames, itemDescriptions, itemTypes);
typeName、typeDescription是字符串。ItemName和itemDescriptions是字符串[]。itemTypes是一个OpenType[]。SimpleType和CompositeType可用于构建OpenType
所有这些对象都必须使用
import javax.management.openmbean.*;