SpringBoot JMX的基本使用方式

 更新时间:2021年09月10日 15:55:09   作者:你是小KS  
这篇文章主要介绍了SpringBoot JMX的基本使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringBoot JMX的基本使用

1. 声明

当前内容主要为学习和使用SpringBoot注册JMX的操作,主要方便管理需要的类

当前内容来源:SpringBoot官方文档

主要内容为:

  • 使用SpringBoot注册JMX中的MBean
  • 使用jconsole查看和修改属性

基本的pom依赖

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.2.13.RELEASE</version>
</parent>
<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
</dependencies>

2. 基本demo

application.properties的内容

spring.jmx.enabled=true

mysqldb.properties的内容

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
# mysql connector timeout check 
jdbc.maxIdle=216000
jdbc.validationQuery=select 1
jdbc.validationQueryTimeout=1800
jdbc.testOnBorrow=true
jdbc.testWhileIdle=true

配置类AppConfig

@Configuration
@PropertySource(value = {"mysqldb.properties"})
@EnableConfigurationProperties(value = { MySQLDBProperties.class})
public class AppConfig {
}

MySQLDBProperties

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;
/**
 * @description 当前内容主要为对应SQLServerDB的数据库配置文件中的属性
 * @author hy
 * @createTime 2021-03-31 13:26:36
 **/
@ConfigurationProperties(prefix = "jdbc")
@ManagedResource("com.hy.springboot.jmx.test.properties:type=MySQLDBProperties,name=MySQLDBProperties")
public class MySQLDBProperties {
	private String url;
	private String driverClassName;
	private String username;
	private String password;
	private Integer maxIdle;
	private Integer validationQueryTimeout;
	private String validationQuery;
	private Boolean testOnBorrow; // 是否在使用的时候进行检查操作
	private Boolean testWhileIdle;// 测试是否已经不能使用了
	@ManagedAttribute
	public Boolean getTestOnBorrow() {
		return testOnBorrow;
	}
	@ManagedAttribute
	public void setTestOnBorrow(Boolean testOnBorrow) {
		this.testOnBorrow = testOnBorrow;
	}
	@ManagedAttribute
	public Boolean getTestWhileIdle() {
		return testWhileIdle;
	}
	@ManagedAttribute
	public void setTestWhileIdle(Boolean testWhileIdle) {
		this.testWhileIdle = testWhileIdle;
	}
	@ManagedAttribute
	public Integer getValidationQueryTimeout() {
		return validationQueryTimeout;
	}
	@ManagedAttribute
	public void setValidationQueryTimeout(Integer validationQueryTimeout) {
		this.validationQueryTimeout = validationQueryTimeout;
	}
	@ManagedAttribute
	public String getValidationQuery() {
		return validationQuery;
	}
	@ManagedAttribute
	public void setValidationQuery(String validationQuery) {
		this.validationQuery = validationQuery;
	}
	@ManagedAttribute
	public Integer getMaxIdle() {
		return maxIdle;
	}
	@ManagedAttribute
	public void setMaxIdle(Integer maxIdle) {
		this.maxIdle = maxIdle;
	}
	@ManagedAttribute
	public String getUrl() {
		return url;
	}
	@ManagedAttribute
	public void setUrl(String url) {
		this.url = url;
	}
	@ManagedAttribute
	public String getDriverClassName() {
		return driverClassName;
	}
	@ManagedAttribute
	public void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	}
	@ManagedAttribute
	public String getUsername() {
		return username;
	}
	@ManagedAttribute
	public void setUsername(String username) {
		this.username = username;
	}
	@ManagedAttribute
	public String getPassword() {
		return password;
	}
	@ManagedAttribute
	public void setPassword(String password) {
		System.out.println("设置新的密码为:" + password);
		this.password = password;
	}
}

主要借助:@ManagedAttribute和@ManagedResource来实现操作

入口类:基本的main方法

3. 执行结果

在这里插入图片描述

使用jconsole连接并查看MBean结果

在这里插入图片描述 在这里插入图片描述

使用JMX可将一些需要的信息注册,然后通过jconsole动态查看运行中的属性,也可以修改属性

springboot自定义jmx对象

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

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

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

什么情况我们需要使用JMX?

我认为比较实用有如下2点:

1、获取java对象里的属性的实时情况。

2、动态修改对象里的属性的值。

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

那要怎么做呢?

首先看一下相关注解定义

将类的所有实例标识为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就能看到这属性和这方法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java中Swing五种常见的布局方式

    java中Swing五种常见的布局方式

    本文通过代码示例给大家详细讲解了java中Swing五种常见的布局方式,以及相关注意知识点,有兴趣的朋友参考学习下。
    2018-03-03
  • 性能爆棚的实体转换复制工具MapStruct使用详解

    性能爆棚的实体转换复制工具MapStruct使用详解

    这篇文章主要为大家介绍了性能爆棚的实体转换复制工具MapStruct使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Java之SpringBoot实现基本增删改查(前后端分离版)

    Java之SpringBoot实现基本增删改查(前后端分离版)

    这篇文章主要介绍了Java中SpringBoot如何实现基本的增删改查,前后端分离版,没有和前端进行联系,感兴趣的小伙伴可以借鉴阅读本文
    2023-03-03
  • Java8 Stream API 详细使用方法与操作技巧指南

    Java8 Stream API 详细使用方法与操作技巧指南

    这篇文章主要介绍了Java8 Stream API 详细使用方法与操作技巧,总结分析了Java8 Stream API 基本功能、使用方法与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • 使用Java实现三种等级的扫雷游戏(完整版)

    使用Java实现三种等级的扫雷游戏(完整版)

    扫雷是一款大众类的益智小游戏,根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输,下面这篇文章主要给大家介绍了关于使用Java实现三种等级的扫雷游戏的相关资料,需要的朋友可以参考下
    2023-01-01
  • mybatis-plus雪花算法自动生成机器id原理及源码

    mybatis-plus雪花算法自动生成机器id原理及源码

    Mybatis-Plus是一个Mybatis的增强工具,它在Mybatis的基础上做了增强,却不做改变,Mybatis-Plus是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等,下面一起看看mybatis-plus雪花算法自动生成机器id原理解析
    2021-06-06
  • JavaWeb中的简单分页完整代码(推荐)

    JavaWeb中的简单分页完整代码(推荐)

    这次主要是讲解一下通过登录后对得到的数据进行分页,首先我们新建一个登录页面login.jsp,因为我们主要学习的分页,所以登录验证的部分没有提到。关于javaweb中的分页代码大家通过本文学习吧
    2016-11-11
  • Spring-boot的debug调试代码实例

    Spring-boot的debug调试代码实例

    这篇文章主要介绍了Spring-boot的debug调试代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 8个简单部分开启Java语言学习之路 附java学习书单

    8个简单部分开启Java语言学习之路 附java学习书单

    8个简单部分开启Java语言学习之路,附java学习书单,这篇文章主要向大家介绍了学习java语言的方向,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 使用Feign调用注解组件(实现字段赋值功能)

    使用Feign调用注解组件(实现字段赋值功能)

    这篇文章主要介绍了使用Feign调用注解组件(实现字段赋值功能),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论