Maison  >  Article  >  Java  >  Comment implémenter le pool de connexions Hikari et configurer la surveillance JMX à l'aide de SpringBoot

Comment implémenter le pool de connexions Hikari et configurer la surveillance JMX à l'aide de SpringBoot

王林
王林avant
2023-05-15 19:58:041678parcourir

Hikari est le pool de connexions à la base de données par défaut de Spring Boot. Contrairement à C3P0, qui obtient divers indicateurs d'état directement via l'objet pool de connexions, Hikari doit les obtenir via JMX. La démo est la suivante, utilisant l'intégration Spring Boot pour collecter régulièrement l'état de la connexion.

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

De plus, un tel problème est mentionné sur github :

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

peut générer une erreur

# 🎜🎜#22:06:23.231 [main] DEBUG com.zaxxer.hikari.HikariConfig - Classe de pilote com.mysql.cj.jdbc.Driver trouvée dans le chargeur de classe de contexte de thread sun.misc.Launcher$AppClassLoader@73d16e93#🎜🎜 # Exception dans le fil de discussion "main" java.lang.reflect.UndeclaredThrowableException

à com.sun.proxy.$Proxy2.getIdleConnections(Unknown Source)
à com.zte.hikariTest.HikariTest.main(HikariTest. java :32)
Causé par : javax.management.InstanceNotFoundException : com.zaxxer.hikari:type=Pool (foo)
sur com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(Source inconnue)# 🎜 🎜# sur com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(Source inconnue)
sur com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(Source inconnue)
sur com.sun.jmx. mbeanserver .MXBeanProxy$GetHandler.invoke(Source inconnue)
à com.sun.jmx.mbeanserver.MXBeanProxy.invoke(Source inconnue)
à javax.management.MBeanServerInvocationHandler.invoke(Source inconnue)#🎜🎜 # ... 2 de plus


Cela est dû au fait que les paramètres de configuration Hikari prennent également en charge setHikariConfig et les fichiers de configuration. Veuillez en choisir un pour la configuration au lieu d'utiliser les deux ensemble. Et veuillez configurer les propriétés comme suit, sinon JMX ne prendra pas effet.

hikaridatasource.setRegisterMbeans(true);
L'effet de code est le suivant


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 = Actif = [1] Idle=[9] Attendre=[0] Total=[10]



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer