java mbean_jmx mbean 与java监控

一 jmx joncole 连接

2种方式:

方式一:

MBeanServer server = ManagementFactory.getPlatformMBeanServer();

ObjectName objectName = new ObjectName("jmxBean:name=hello");

server.registerMBean(new Hello(), objectName);

// 方式一,启动时指定,代码到此为止

/**

* -Djava.rmi.server.hostname=192.168.57.234

* -Dcom.sun.management.jmxremote.port=8288

* -Dcom.sun.management.jmxremote.authenticate=false

* -Dcom.sun.management.jmxremote.ssl=false

*/

// 放大用

Thread.sleep(100000000);

方式二:

MBeanServer server = ManagementFactory.getPlatformMBeanServer();

ObjectName objectName = new ObjectName("jmxBean:name=hello");

server.registerMBean(new Hello(), objectName);

/**

* 方式二 代码注册

* 但启动时仍然需要指定 -Djava.rmi.server.hostname=192.168.57.234,否则客户端jconsole无法连接

*/

Registry registry = LocateRegistry.createRegistry(8288);

JMXServiceURL jmxServiceURL = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8288/jmxrmi");

JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(jmxServiceURL, null, server);

cs.start();

之后jconsole可以

(当然也可以自己写client获取jmx connector,并展示HelloMBean的一些信息,属性,及调用其方法,并通过jmx通知感应属性的变更,结合后可做可视化配置中心):

9e801910fc59bad1808c416a9bca0582.png

访问属性值

给属性赋值

调用其中的方法,可输入参数

注意:“属性”取决于接口HelloMBean中的get set函数,而不是其实现类,由jmx自动识别;其它函数识别为“操作”

属性        读           接口HelloMBean get开头的函数

写           接口HelloMBeanset开头的函数

操作         接口HelloMBean其它函数

通知         实现类  Hello 去继承 extends NotificationBroadcasterSupport

d0eb039338bd3fc3a6b3ded262145f4c.png

二  MXBean

当xxxMBean中有自定义类型时,jconsole提示不可用

此时应当用xxxMXBean

三  通知

1. JMX中要定义接口必须以xxxMBean的规范定义

2. 得有类实现xxxMBean接口

3. 在实现类中可以继承NotificationBroadcasterSupport来支持通知机制

4. 可以通过n个jconsole client来验证server的通知,验证通过

四   spring

475d080dedd1ad0e52fceab2619ed5be.png

现在,要把任意一个Spring bean转变为MBean,我们所需要做的仅仅是使 用@ManagedResource注解标注bean并使用@ManagedOperation 或@ManagedAttribute注解标注bean的方法。

在类级别使用了@ManagedResource注解来标识这个bean应该被导出为 MBean。objectName属性标识了域(Spitter)和MBean的名称(SpittleController)。 spittlesPerPage属性的存取器方法都使用了@ManagedAttribute注解来进行标注,这 表示该属性应该暴露为MBean的托管属性。注意,其实并不需要使用注解同时标注这两个存取 器方法。如果我们选择仅标注setSpittlesPerPage()方法,那我们仍可以通过JMX设置 该属性,但这样的话我们将不能查看该属性的值。相反,如果仅仅标注 getSpittlesPerPage()方法,那我们可以通过JMX查看该属性的值,但无法修改该属性 的值。

同样需要提醒一下,我们还可以使用@ManagedOperation注解替换@ManagedAttribute 注解来标注存取器方法。这会将方法暴露为MBean的托管操作,但是并不会把spittlesPerPage属性暴露为MBean 的托管属性。这是因为在暴露MBean功能时,使用@ManagedOperation注解标注方法是严 格限制方法的,并不会把它作为JavaBean的存取器方法。因此,使用@ManagedOperation可 以用来把bean的方法暴露为MBean托管操作,而使用@ManagedAttribute可以把bean的属 性暴露为MBean托管属性。

ManagedResource

属性        读           ManagedAttribute注解get方法

写           ManagedAttribute注解set方法

操作         ManagedOperation注解的方法

通知         实现NotificationPublisherAware接口

266c8755011ea7ecdac1e1ab68c7d03a.png

一如既往,spring搞得很复杂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值