Hikari连接池使用SpringBoot配置JMX监控实现

Hikari是Spring Boot默认的数据库连接池。区别于C3P0直接通过连接池对象获取各项状态指标,Hikari需要通过JMX来获取。Demo如下,采用Spring Boot集成,定时采集连接状态。

public static void main(String[] args) throws SQLException, MalformedObjectNameException, InterruptedException {
 SpringApplication.run(HikariTest.class, args);
 HikariDataSource hikaridatasource = new HikariDataSource();
 hikaridatasource.setJdbcUrl("jdbc:mysql://localhost:3306?serverTimezone=GMT");
 hikaridatasource.setUsername("root");
 hikaridatasource.setPassword("");
 hikaridatasource.setDriverClassName("com.mysql.cj.jdbc.Driver");
 hikaridatasource.setRegisterMbeans(true);
 hikaridatasource.setPoolName("HikariConnectionPool");
 MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
 ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (" + hikaridatasource.getPoolName() + ")");
 poolProxy = JMX.newMXBeanProxy(mBeanServer, poolName, HikariPoolMXBean.class);
 Connection conn = hikaridatasource.getConnection();
 Statement sm = conn.createStatement();
 ResultSet rs = null;
 for (int i = 0; i < 999999999; i++) {
  rs = sm.executeQuery("select name from test.t1");
 }
 rs.close();
 sm.close();
 conn.close();
 hikaridatasource.close();
}

@Scheduled(fixedRate = 1000)
public void HikariMonitor() {
 if(poolProxy == null) {
  log.info("Hikari not initialized,please wait...");
 }else {
  log.info("HikariPoolState = "
  + "Active=[" + String.valueOf(poolProxy.getActiveConnections() + "] "
  + "Idle=[" + String.valueOf(poolProxy.getIdleConnections() + "] "
  + "Wait=["+poolProxy.getThreadsAwaitingConnection()+"] "
  + "Total=["+poolProxy.getTotalConnections()+"]")));
 }
}

另外,在github有提到这样的issue:

ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (" + hikaridatasource.getPoolName() + ")");

可能会抛错

22:06:23.231 [main] DEBUG com.zaxxer.hikari.HikariConfig - Driver class com.mysql.cj.jdbc.Driver found in Thread context class loader sun.misc.Launcher$AppClassLoader@73d16e93
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
 at com.sun.proxy.$Proxy2.getIdleConnections(Unknown Source)
 at com.zte.hikariTest.HikariTest.main(HikariTest.java:32)
Caused by: javax.management.InstanceNotFoundException: com.zaxxer.hikari:type=Pool (foo)
 at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(Unknown Source)
 at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(Unknown Source)
 at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(Unknown Source)
 at com.sun.jmx.mbeanserver.MXBeanProxy$GetHandler.invoke(Unknown Source)
 at com.sun.jmx.mbeanserver.MXBeanProxy.invoke(Unknown Source)
 at javax.management.MBeanServerInvocationHandler.invoke(Unknown Source)
 ... 2 more

这是因为Hikari设置参数同样支持setHikariConfig和配置文件两种配置方式,请选择其中一种进行配置,而不是二者一起使用。并且请配置属性如下,否则 JMX 无法生效。

hikaridatasource.setRegisterMbeans(true);

代码效果如下所示

2019-03-09 02:05:04.738 INFO com.zte.hikariTest.HikariTest.69 -HikariPoolState = Active=[1] Idle=[9] Wait=[0] Total=[10]
2019-03-09 02:05:05.740 INFO com.zte.hikariTest.HikariTest.69 -HikariPoolState = Active=[1] Idle=[9] Wait=[0] Total=[10]
2019-03-09 02:05:06.732 INFO com.zte.hikariTest.HikariTest.69 -HikariPoolState = Active=[1] Idle=[9] Wait=[0] Total=[10]
2019-03-09 02:05:07.738 INFO com.zte.hikariTest.HikariTest.69 -HikariPoolState = Active=[1] Idle=[9] Wait=[0] Total=[10]

到此这篇关于Hikari连接池使用SpringBoot配置JMX监控的文章就介绍到这了,更多相关SpringBoot配置JMX监控内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot2.0使用Hikari连接池的方法(替换druid)

    1.springboot 2.0 默认连接池就是Hikari了,所以引用parents后不用专门加依赖 2.贴我自己的配置(时间单位都是毫秒) # jdbc_config datasource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/datebook?useUnicode=true&characterEncoding=UT

  • SpringBoot2.0 中 HikariCP 数据库连接池原理解析

    作为后台服务开发,在日常工作中我们天天都在跟数据库打交道,一直在进行各种CRUD操作,都会使用到数据库连接池.按照发展历程,业界知名的数据库连接池有以下几种:c3p0.DBCP.Tomcat JDBC Connection Pool.Druid 等,不过最近最火的是 HiKariCP. HiKariCP 号称是业界跑得最快的数据库连接池,自从 SpringBoot 2.0 将其作为默认数据库连接池后,其发展势头锐不可当.那它为什么那么快呢?今天咱们就重点聊聊其中的原因. 一.什么是数据库连接池

  • spring boot配置MySQL数据库连接、Hikari连接池和Mybatis的简单配置方法

    此方法为极简配置,支持MySQL数据库多库连接.支持Hikari连接池.支持MyBatis(包括Dao类和xml文件位置的配置). 1.pom.xml中引入依赖: <!-- Begin of DB related --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId>

  • Spring Boot如何使用HikariCP连接池详解

    前言 Springboot让Java开发更加美好,更加简洁,更加简单.Spring Boot 2.x中使用HikariCP作为默认的数据连接池. HikariCP使用Javassist字节码操作库来实现动态代理,优化并精简了字节码,同时内部使用 com.zaxxer.hikari.util.FastList 代替ArrayList.使用了更好的并发集合类 com.zaxxer.hikari.util.ConcurrentBag ,"号称"是目前最快的数据库连接池. 下面话不多说了,来一

  • Hikari连接池使用SpringBoot配置JMX监控实现

    Hikari是Spring Boot默认的数据库连接池.区别于C3P0直接通过连接池对象获取各项状态指标,Hikari需要通过JMX来获取.Demo如下,采用Spring Boot集成,定时采集连接状态. public static void main(String[] args) throws SQLException, MalformedObjectNameException, InterruptedException { SpringApplication.run(HikariTest.c

  • spring boot中配置hikari连接池属性方式

    目录 spring boot配置hikari连接池属性 spring-boot默认连接池 Hikari配置 Hikari连接池配置说明 spring boot配置hikari连接池属性 事件起因与一个简单应用经常发生Young GC,甚至在没有请求量的情况下也经常发生GC (Allocation Failure),后来使用mat工具进行分析,发现mysql连接相关的class居然占了40%+堆内空间. 才发现spring boot的连接池大小没有配置,默认是10个连接,但实际上该应用不需要这么多

  • C3P0连接池+MySQL的配置及wait_timeout问题的解决方法

     一.配置环境 spring4.2.4+mybatis3.2.8+c3p0-0.9.1.2+Mysql5.6.24 二.c3p0的配置详解及spring+c3p0配置 1.配置详解 官方文档 : http://www.mchange.com/projects/c3p0/index.html <c3p0-config> < default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> <property

  • 详解Spring Boot下Druid连接池的使用配置分析

    引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连接池,在连接池之外,还提供了非常优秀的监控功能,这里讲解如何与Spring Boot实现集成. 1.  环境描述 spring Boot 1.4.0.RELEASE,  JDK 1.8 2.   Druid介绍 Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系. DruidDataSource 高效可管理的数据

  • 详解SpringBoot配置连接池

    内置的连接池 目前spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池. 数据库连接可以使用DataSource池进行自动配置. 由于Tomcat数据源连接池的性能和并发,在tomcat可用时,我们总是优先使用它. 如果HikariCP可用,我们将使用它. 如果Commons DBCP可用,我们将使用它,但在生产环境不推荐使用它. 最后,如果Commons DBCP2可用,我们将使用它. 以上的几种连接池,可以通过在配置application文

  • springboot整合druid连接池的步骤

    使用springboot默认的连接池 导入springboot data-jdbc依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> 配置文件配置连接池 spring: datasource: username: root pass

  • SpringBoot对Druid配置SQL监控功能失效问题及解决方法

    由于我使用的是properties类型的配置文件,在对druid的参数进行配置的时候,多加了druid,也就是spring.datasource.druid.xxx,运行sql语句后SQL监控功能无效. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/userinfo?useUnicode=true&characterEnc

  • SpringBoot集成Druid连接池连接MySQL8.0.11

    目录 1.配置依赖 1.1MySQL Connector/J依赖配置 maven 1.2Druid依赖配置 2.配置DataSource 2.1创建配置类 2.2注意事项 这篇博客简单介绍spring boot集成druid连接池的简单配置和注意事项 本次使用的是MySQL8.0.11版本 前提:一个已经搭建好的Spring Boot项目和可以使用的数据库 注意:MySQL8.0.X的配置和5.7.X有小差异,整体思路完全一样 1.配置依赖 依赖管理我们可以使用maven或者gradle MyS

随机推荐