Heim  >  Artikel  >  Java  >  So implementieren Sie den Hikari-Verbindungspool und konfigurieren die JMX-Überwachung mit SpringBoot

So implementieren Sie den Hikari-Verbindungspool und konfigurieren die JMX-Überwachung mit SpringBoot

王林
王林nach vorne
2023-05-15 19:58:041718Durchsuche

Hikari ist der Standard-Datenbankverbindungspool von Spring Boot. Im Gegensatz zu C3P0, das verschiedene Statusindikatoren direkt über das Verbindungspoolobjekt erhält, muss Hikari diese über JMX abrufen. Die Demo sieht wie folgt aus: Mithilfe der Spring Boot-Integration wird der Verbindungsstatus regelmäßig erfasst.

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

Darüber hinaus wird auf Github ein solches Problem erwähnt:

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

kann einen Fehler auslösen

22:06:23.231 [main] DEBUG com.zaxxer.hikari.HikariConfig – Treiberklasse com.mysql. cj .jdbc.Driver im Thread-Kontext-Klassenlader sun.misc.Launcher$AppClassLoader@73d16e93
Ausnahme im Thread „main“ java.lang.reflect.UndeclaredThrowableException
bei com.sun.proxy.$Proxy2.getIdleConnections (Unbekannte Quelle) gefunden
bei com.zte.hikariTest.HikariTest.main(HikariTest.java:32)
Verursacht durch: javax.management.InstanceNotFoundException: com.zaxxer.hikari:type=Pool (foo)
bei com.sun.jmx.interceptor. DefaultMBeanServerInterceptor .getMBean(Unbekannte Quelle)
bei com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(Unbekannte Quelle)
bei com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(Unbekannte Quelle)
bei com.sun.jmx.mbeanserver . MXBeanProxy$GetHandler.invoke(Unbekannte Quelle)
bei com.sun.jmx.mbeanserver.MXBeanProxy.invoke(Unbekannte Quelle)
bei javax.management.MBeanServerInvocationHandler.invoke(Unbekannte Quelle)
... 2 weitere

Dies Da Hikari-Einstellungsparameter auch setHikariConfig und Konfigurationsdateien unterstützen, wählen Sie bitte eine davon für die Konfiguration aus, anstatt beide zusammen zu verwenden. Und bitte konfigurieren Sie die Eigenschaften wie folgt, sonst wird JMX nicht wirksam.

hikaridatasource.setRegisterMbeans(true);

Der Codeeffekt ist wie folgt

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]

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den Hikari-Verbindungspool und konfigurieren die JMX-Überwachung mit SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen