热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBootJMX的基本使用方式_java

这篇文章主要介绍了SpringBootJMX的基本使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完

SpringBoot JMX的基本使用

1. 声明

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

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

主要内容为:

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

基本的pom依赖


 org.springframework.boot
 spring-boot-starter-parent
 2.2.13.RELEASE


 UTF-8


 
  org.springframework.boot
  spring-boot-starter-web
 

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访问方式。


    org.jolokia
    jolokia-core

什么情况我们需要使用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就能看到这属性和这方法。


推荐阅读
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 本文介绍了在 Spring Boot 中使用 JPA 进行数据删除操作时遇到的 SQL 错误及其解决方法。错误表现为:删除操作失败,原因是无法打开 JPA EntityManager 以进行事务处理。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
author-avatar
印度神油两性a
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有