请选择 进入手机版 | 继续访问电脑版

[java] SpringBoot JMX的基本利用 方式

[复制链接]
查看112 | 回复15 | 2021-9-13 01:55:25 | 显示全部楼层 |阅读模式
目次

SpringBoot JMX的基本利用

1. 声明

当前内容告急 为学习和利用 SpringBoot注册JMX的操作,告急 方便管理必要 的类

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

告急 内容为:

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

基本的pom依赖

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.2.13.RELEASE</version>
  5. </parent>
  6. <properties>
  7. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  8. </properties>
  9. <dependencies>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-web</artifactId>
  13. </dependency>
  14. </dependencies>
复制代码

2. 基本demo

application.properties的内容

  1. spring.jmx.enabled=true
复制代码

mysqldb.properties的内容

  1. jdbc.driverClassName=com.mysql.cj.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
  3. jdbc.username=root
  4. jdbc.password=123456
  5. # mysql connector timeout check
  6. jdbc.maxIdle=216000
  7. jdbc.validationQuery=select 1
  8. jdbc.validationQueryTimeout=1800
  9. jdbc.testOnBorrow=true
  10. jdbc.testWhileIdle=true
复制代码

设置 类AppConfig

  1. @Configuration
  2. @PropertySource(value = {"mysqldb.properties"})
  3. @EnableConfigurationProperties(value = { MySQLDBProperties.class})
  4. public class AppConfig {
  5. }
复制代码

MySQLDBProperties

  1. import org.springframework.boot.context.properties.ConfigurationProperties;
  2. import org.springframework.jmx.export.annotation.ManagedAttribute;
  3. import org.springframework.jmx.export.annotation.ManagedResource;
  4. /**
  5. * @description 当前内容主要为对应SQLServerDB的数据库配置文件中的属性
  6. * @author hy
  7. * @createTime 2021-03-31 13:26:36
  8. **/
  9. @ConfigurationProperties(prefix = "jdbc")
  10. @ManagedResource("com.hy.springboot.jmx.test.properties:type=MySQLDBProperties,name=MySQLDBProperties")
  11. public class MySQLDBProperties {
  12. private String url;
  13. private String driverClassName;
  14. private String username;
  15. private String password;
  16. private Integer maxIdle;
  17. private Integer validationQueryTimeout;
  18. private String validationQuery;
  19. private Boolean testOnBorrow; // 是否在使用的时候进行检查操作
  20. private Boolean testWhileIdle;// 测试是否已经不能使用了
  21. @ManagedAttribute
  22. public Boolean getTestOnBorrow() {
  23. return testOnBorrow;
  24. }
  25. @ManagedAttribute
  26. public void setTestOnBorrow(Boolean testOnBorrow) {
  27. this.testOnBorrow = testOnBorrow;
  28. }
  29. @ManagedAttribute
  30. public Boolean getTestWhileIdle() {
  31. return testWhileIdle;
  32. }
  33. @ManagedAttribute
  34. public void setTestWhileIdle(Boolean testWhileIdle) {
  35. this.testWhileIdle = testWhileIdle;
  36. }
  37. @ManagedAttribute
  38. public Integer getValidationQueryTimeout() {
  39. return validationQueryTimeout;
  40. }
  41. @ManagedAttribute
  42. public void setValidationQueryTimeout(Integer validationQueryTimeout) {
  43. this.validationQueryTimeout = validationQueryTimeout;
  44. }
  45. @ManagedAttribute
  46. public String getValidationQuery() {
  47. return validationQuery;
  48. }
  49. @ManagedAttribute
  50. public void setValidationQuery(String validationQuery) {
  51. this.validationQuery = validationQuery;
  52. }
  53. @ManagedAttribute
  54. public Integer getMaxIdle() {
  55. return maxIdle;
  56. }
  57. @ManagedAttribute
  58. public void setMaxIdle(Integer maxIdle) {
  59. this.maxIdle = maxIdle;
  60. }
  61. @ManagedAttribute
  62. public String getUrl() {
  63. return url;
  64. }
  65. @ManagedAttribute
  66. public void setUrl(String url) {
  67. this.url = url;
  68. }
  69. @ManagedAttribute
  70. public String getDriverClassName() {
  71. return driverClassName;
  72. }
  73. @ManagedAttribute
  74. public void setDriverClassName(String driverClassName) {
  75. this.driverClassName = driverClassName;
  76. }
  77. @ManagedAttribute
  78. public String getUsername() {
  79. return username;
  80. }
  81. @ManagedAttribute
  82. public void setUsername(String username) {
  83. this.username = username;
  84. }
  85. @ManagedAttribute
  86. public String getPassword() {
  87. return password;
  88. }
  89. @ManagedAttribute
  90. public void setPassword(String password) {
  91. System.out.println("设置新的密码为:" + password);
  92. this.password = password;
  93. }
  94. }
复制代码

告急 借助:@ManagedAttribute和@ManagedResource来实现操作

入口类:基本的main方法

3. 实行 结果

在这里插入图片形貌

利用 jconsole毗连 并查看MBean结果

在这里插入图片形貌
在这里插入图片形貌

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

springboot自定义jmx对象

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

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

  1. <dependency>
  2. <groupId>org.jolokia</groupId>
  3. <artifactId>jolokia-core</artifactId>
  4. </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 方法

例子:

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.jmx.export.annotation.ManagedAttribute;
  3. import org.springframework.jmx.export.annotation.ManagedResource;
  4. import lombok.extern.slf4j.Slf4j;
  5. @Service
  6. @Slf4j
  7. @ManagedResource (objectName= "com.longge:name=spideMpbServiceImpl" , description= "brower spider service" )
  8. public class SpideMpbServiceImpl implements SpideMpbService {
  9. // 临时表当前最大id
  10. private Long tempMaxId = 0L;
  11. /**
  12. * 暴露mbean方法
  13. * @return
  14. */
  15. @ManagedAttribute(description="temp info now max id")
  16. public Long getNowTempMaxId() {
  17. return tempMaxId;
  18. }
  19. }
复制代码

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

以上为个人履历 ,盼望 能给大家一个参考,也盼望 大家多多支持脚本之家。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 真无牙泛 | 2021-9-18 03:44:35 | 显示全部楼层
什么狗屁帖子啊,admin楼主的语文是苍老师教的吗?
回复

使用道具 举报

avatar 疑骨德秋忘 | 2021-9-19 07:05:08 | 显示全部楼层
楼上的刚出院吧?
回复

使用道具 举报

avatar 尹泽汐猩 | 2021-9-23 21:36:08 | 显示全部楼层
不错哦,admin楼主这是要火的节奏啊!
回复

使用道具 举报

avatar caymkda949764 | 2021-9-27 01:14:09 | 显示全部楼层
顶顶更健康!
回复

使用道具 举报

avatar 钟情695 | 2021-10-10 10:22:05 | 显示全部楼层
鸟大了,什么林子都敢进啊!
回复

使用道具 举报

avatar 就放荡不羁就h | 2021-10-10 23:39:15 | 显示全部楼层
对牛弹琴的人越来越多了!
回复

使用道具 举报

avatar 123457625 | 2021-10-13 12:14:54 | 显示全部楼层
看帖不回帖都是耍流氓!
回复

使用道具 举报

avatar 阿德莱德探路者 | 2021-10-13 12:59:06 | 显示全部楼层
在这个版块混了这么久了,第一次看见这么给你的帖子!
回复

使用道具 举报

avatar 白刃玄衣及 | 2021-10-13 14:05:03 | 显示全部楼层
楼上的能详细介绍一下么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则