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.UndeclaredThrowableExceptionL'effet de code est le suivantà 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
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: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!