springboot自定义jmx对象

在使用springboot-admin对springboot项目进行监控的时候咱们发现其是具备web访问jmx对象的功能的,那它内部是怎么实现的呢。java

Jolokia是一个JMX-http桥梁,它提供了访问JMX bean的HTTP访问方式。web

<dependency>
    <groupId>org.jolokia</groupId>
    <artifactId>jolokia-core</artifactId>
</dependency>

 

什么状况咱们须要使用JMX? 我认为比较实用有以下2点:spring

一、获取java对象里的属性的实时状况。数据库

二、动态修改对象里的属性的值。缓存

 

例如:你有一个耗时较长的定时任务,里面会处理一批数据,这时经过jmx暴露当前已处理的数据的相关数据就能获得实时的结果(固然,你能够经过写日志、数据库、缓存来实现,但这无疑增长了更业务无关的代码)。springboot

 

那要怎么作呢?ide

首先看一下相关注解定义spa

将类的全部实例标识为JMX受控资源 ManagedResource @ManagedResource Class 类
将方法标识为JMX操做 ManagedOperation @ManagedOperation  Method方法
将getter或者setter标识为部分JMX属性 ManagedAttribute @ManagedAttribute Method (only getters and setters) 方法(仅getters和setters)
定义操做参数说明 ManagedOperationParameter @ManagedOperationParameter@ManagedOperationParameters Method 方法

例子:日志

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;
import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
@ManagedResource (objectName= "com.longge:name=spideMpbServiceImpl" , description= "brower spider service" )
public class SpideMpbServiceImpl implements SpideMpbService {
    // 临时表当前最大id
    private Long tempMaxId = 0L;
     
    /**
     * 暴露mbean方法
     * @return
     */
    @ManagedAttribute(description="temp info now max id")
    public Long getNowTempMaxId() {
        return tempMaxId;
    }
}

 在JMC的Mbean选项卡、springboot-admin的jmx就能看到这属性和这方法code

相关文章
相关标签/搜索