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这是因为Hikari设置参数同样支持setHikariConfig和配置文件两种配置方式,请选择其中一种进行配置,而不是二者一起使用。并且请配置属性如下,否则 JMX 无法生效。
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
hikaridatasource.setRegisterMbeans(true);
代码效果如下所示
【Hikari连接池使用SpringBoot配置JMX监控实现】2019-03-09 02:05:04.738 INFO com.zte.hikariTest.HikariTest.69 -HikariPoolState = Active=[1] Idle=[9] Wait=[0] Total=[10]到此这篇关于Hikari连接池使用SpringBoot配置JMX监控的文章就介绍到这了,更多相关SpringBoot配置JMX监控内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
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]
推荐阅读
- 欢乐小分队内蒙东北行第六站(第十二天)五大连池印象之(奇特壮观的火山地貌景观)
- py连接mysql
- Android|Android BLE蓝牙连接异常处理
- 寻美姬渐不遇
- 墨池寻欢,书海探险(6)(临赵松雪《心经》)
- springboot整合数据库连接池-->druid
- spring|spring boot中设置异步请求默认使用的线程池
- Python3|Python3 MySQL 数据库连接
- Xshell5|Xshell5 远程连接本地虚拟机Ubuntu16
- mac|mac 链接linux服务器 如何在Mac上连接服务器