ホームページ  >  記事  >  Java  >  SpringBootを使用してHikari接続プールを実装し、JMX監視を構成する方法

SpringBootを使用してHikari接続プールを実装し、JMX監視を構成する方法

王林
王林転載
2023-05-15 19:58:041678ブラウズ

Hikari は Spring Boot のデフォルトのデータベース接続プールです。接続プール オブジェクトを通じてさまざまなステータス インジケーターを直接取得する C3P0 とは異なり、Hikari は JMX を通じてステータス インジケーターを取得する必要があります。デモは次のとおりで、Spring Boot 統合を使用して接続ステータスを定期的に収集します。

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

さらに、github で次のような問題が言及されています:

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

はエラーをスローする可能性があります

22:06:23.231 [ main] デバッグ com.zaxxer.hikari.HikariConfig - ドライバー クラス com.mysql.cj.jdbc.Driver がスレッド コンテキスト クラス ローダーで見つかりました sun.misc.Launcher$AppClassLoader@73d16e93
スレッド "main" java.lang で例外が発生しました.reflect.UndeclaredThrowableException
com.sun.proxy.$Proxy2.getIdleConnections(Unknown Source)
com.zte.hikariTest.HikariTest.main(HikariTest.java:32)
原因: javax。 Management .InstanceNotFoundException: com.zaxxer.hikari:type=Pool (foo)
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(Unknown Source)
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute ( ソース不明)
com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(ソース不明)
com.sun.jmx.mbeanserver.MXBeanProxy$GetHandler.invoke(ソース不明)
com. sun .jmx.mbeanserver.MXBeanProxy.invoke(Unknown Source)
at javax.management.MBeanServerInvocationHandler.invoke(Unknown Source)
... 2 more

これは、Hikari が設定しているためです。また、setHikariConfig と設定ファイルの 2 つの設定方法をサポートしていますので、両方を併用するのではなく、どちらか一方を選択して設定してください。また、次のようにプロパティを設定してください。そうしないと、JMX が有効になりません。

hikaridatasource.setRegisterMbeans(true);

コードの効果は次のとおりです

2019-03-09 02:05:04.738 INFO com.zte.hikariTest.HikariTest.69 -HikariPoolState = アクティブ =[1] アイドル =[9] 待機 =[0] 合計 =[10]
2019-03-09 02:05:05.740 情報 com.zte.hikariTest.HikariTest.69 -HikariPoolState = Active=[ 1 ] アイドル = [9] 待機 = [0] 合計 = [10]
2019-03-09 02:05:06.732 情報 com.zte.hikariTest.HikariTest.69 -HikariPoolState = Active=[1] Idle= [ 9] 待機 =[0] 合計 =[10]
2019-03-09 02:05:07.738 情報 com.zte.hikariTest.HikariTest.69 -HikariPoolState = Active=[1] Idle=[9] 待機= [0] 合計 = [10]

以上がSpringBootを使用してHikari接続プールを実装し、JMX監視を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。