Maison > Java > javaDidacticiel > 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

王林
Libérer: 2023-05-15 19:58:04
avant
1745 Les gens l'ont consulté

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()+"]")));
 } 
}
Copier après la connexion

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

ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (" + hikaridatasource.getPoolName() + ")");
Copier après la connexion

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);
Copier après la connexion
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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal