Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan kumpulan sambungan Hikari dan mengkonfigurasi pemantauan JMX menggunakan SpringBoot

Bagaimana untuk melaksanakan kumpulan sambungan Hikari dan mengkonfigurasi pemantauan JMX menggunakan SpringBoot

王林
王林ke hadapan
2023-05-15 19:58:041717semak imbas

Hikari ialah kumpulan sambungan pangkalan data lalai Spring Boot. Berbeza daripada C3P0, yang memperoleh pelbagai penunjuk status secara terus melalui objek kolam sambungan, Hikari perlu mendapatkannya melalui JMX. Demo adalah seperti berikut, menggunakan integrasi Spring Boot untuk mengumpul status sambungan dengan kerap.

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()+"]")));
 } 
}

Selain itu, terdapat isu sedemikian yang disebut di github:

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

boleh membuang ralat

22:06:23.231 [ utama] DEBUG com.zaxxer.hikari.HikariConfig - Kelas pemacu com.mysql.cj.jdbc.Pemandu ditemui dalam Thread context class loader sun.misc.Launcher$AppClassLoader@73d16e93
Pengecualian dalam thread "main" java.lang . reflect.UndeclaredThrowableException
di com.sun.proxy.$Proxy2.getIdleConnections(Sumber Tidak Diketahui)
di com.zte.hikariTest.HikariTest.main(HikariTest.java:32)
Disebabkan oleh: javax. pengurusan .InstanceNotFoundException: com.zaxxer.hikari:type=Pool (foo)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(Unknown Source)
at com.sun.jmx.interceptor.DefaultAtributMBenterceptor.DefaultInterceptor. ( Sumber Tidak Diketahui)
di com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(Sumber Tidak Diketahui)
di com.sun.jmx.mbeanserver.MXBeanProxy$GetHandler.invoke(Sumber Tidak Diketahui)
di com. sun .jmx.mbeanserver.MXBeanProxy.invoke(Sumber Tidak Diketahui)
di javax.management.MBeanServerInvocationHandler.invoke(Sumber Tidak Diketahui)
... 2 lagi

Ini kerana Hikari menetapkan parameter Ia juga menyokong dua kaedah konfigurasi: setHikariConfig dan fail konfigurasi Sila pilih salah satu daripadanya untuk konfigurasi dan bukannya menggunakan kedua-duanya bersama-sama. Dan sila konfigurasikan sifat seperti berikut, jika tidak JMX tidak akan berkuat kuasa.

hikaridatasource.setRegisterMbeans(true);

Kesan kod adalah seperti berikut

2019-03-09 02:05:04.738 INFO com.zte.hikariTest.HikariTest.69 -HikariPoolState = Aktif=[1] Terbiar=[9] Tunggu=[0] Jumlah=[10]
2019-03-09 02:05:05.740 INFO com.zte.hikariTest.HikariTest.69 -HikariPoolState = Aktif=[ 1 ] Terbiar=[9] Tunggu=[0] Jumlah=[10]
2019-03-09 02:05:06.732 INFO com.zte.hikariTest.HikariTest.69 -HikariPoolState = Aktif=[1] Terbiar= [ 9] Tunggu=[0] Jumlah=[10]
2019-03-09 02:05:07.738 MAKLUMAT com.zte.hikariTest.HikariTest.69 -HikariPoolState = Active=[1] Terbiar=[9] Tunggu = [0] Jumlah=[10]

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan kumpulan sambungan Hikari dan mengkonfigurasi pemantauan JMX menggunakan SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam