【问题标题】:how to check HikariCP connection pooling is working or not in Java?如何检查 HikariCP 连接池在 Java 中是否正常工作?
【发布时间】:2018-12-10 17:05:42
【问题描述】:

我在我使用的配置文件中编写了以下属性Log4j 在我的应用程序中运行项目时。

我收到以下消息。这是否意味着在我的项目中配置了连接池?如果没有,那会怎样?

INFO:internal.ConnectionProviderInitiator - HHH000130:实例化显式连接提供程序:com.zaxxer.hikari.hibernate.HikariConnectionProvider

我也参考了以下链接

link here

数据源设置

hibernate.datasource.driver-class-name=com.mysql.jdbc.Driver
hibernate.datasource.url=jdbc:mysql://localhost:3306/mydb
hibernate.datasource.username=root
hibernate.datasource.password=root

HikariCP 设置

hibernate.hikari.dataSource.url=jdbc:mysql://localhost:3306/mydb
hibernate.hikari.idleTimeout=10
hibernate.hikari.maximumPoolSize=30
hibernate.hikari.minimumIdle=15
hibernate.connection.provider_class=com.zaxxer.hikari.hibernate.HikariConnectionProvider
hibernate.hikari.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource

【问题讨论】:

  • @soorapadman INFO: internal.ConnectionProviderInitiator - HHH000130: 实例化显式连接提供程序:com.zaxxer.hikari.hibernate.HikariConnectionProvider 这是否意味着建立了连接池。?
  • 请添加 poolname 并检查天气是否启动。显然只初始化一次连接池。
  • @soorapadman 是的,加载后我得到了 INFO: internal.ConnectionProviderInitiator - HHH000130.... 进入控制台
  • 看起来你的配置对我来说很好。

标签: java mysql hibernate connection-pooling hikaricp


【解决方案1】:

首先,配置不一致,因为maximum

hibernate.hikari.maximumPoolSize=10
hibernate.hikari.minimumIdle=10

如果池正常工作,您应该会看到 10 个与端口 3306(或下面示例中的 mssql 1433)的 ESTABLISHED 连接。

lsof -nP -i :1433 -sTCP:ESTABLISHED
COMMAND  PID       USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    1596 lmc  260u  IPv6 1624799      0t0  TCP 127.0.0.1:43022->127.0.0.1:1433 (ESTABLISHED)
java    1596 lmc  265u  IPv6 1626072      0t0  TCP 127.0.0.1:43026->127.0.0.1:1433 (ESTABLISHED)
java    1596 lmc  266u  IPv6 1630933      0t0  TCP 127.0.0.1:43030->127.0.0.1:1433 (ESTABLISHED)
java    1596 lmc  267u  IPv6 1631705      0t0  TCP 127.0.0.1:43034->127.0.0.1:1433 (ESTABLISHED)
java    1596 lmc  268u  IPv6 1632268      0t0  TCP 127.0.0.1:43038->127.0.0.1:1433 (ESTABLISHED)
java    1596 lmc  269u  IPv6 1632273      0t0  TCP 127.0.0.1:43042->127.0.0.1:1433 (ESTABLISHED)
java    1596 lmc  270u  IPv6 1632278      0t0  TCP 127.0.0.1:43046->127.0.0.1:1433 (ESTABLISHED)

使用ss(套接字统计信息)

ss -46 -np state established dport = :1433 | grep 'java' | sort -r -k 3,3 | nl
     1  tcp    0       0          [::ffff:127.0.0.1]:43158     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=273))                                               
     2  tcp    0       0          [::ffff:127.0.0.1]:43154     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=272))                                               
     3  tcp    0       0          [::ffff:127.0.0.1]:43150     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=271))                                               
     4  tcp    0       0          [::ffff:127.0.0.1]:43142     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=270))                                               
     5  tcp    0       0          [::ffff:127.0.0.1]:43138     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=269))                                               
     6  tcp    0       0          [::ffff:127.0.0.1]:43134     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=268))                                               
     7  tcp    0       0          [::ffff:127.0.0.1]:43130     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=267))                                               
     8  tcp    0       0          [::ffff:127.0.0.1]:43126     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=266))                                               
     9  tcp    0       0          [::ffff:127.0.0.1]:43122     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=265))                                               
    10  tcp    0       0          [::ffff:127.0.0.1]:43118     [::ffff:127.0.0.1]:1433   users:(("java",pid=1596,fd=260))

使用netstat(在某些发行版上不推荐使用ss

netstat -ant | grep 3306
tcp        0      0 127.0.0.1:41722     127.0.0.1:3306      ESTABLISHED 
tcp        0      0 127.0.0.1:41730     127.0.0.1:3306      ESTABLISHED 
tcp        0      0 127.0.0.1:41728     127.0.0.1:3306      ESTABLISHED 
tcp        0      0 127.0.0.1:41726     127.0.0.1:3306      ESTABLISHED 
tcp        0      0 127.0.0.1:41716     127.0.0.1:3306      ESTABLISHED 
tcp        0      0 127.0.0.1:41732     127.0.0.1:3306      ESTABLISHED 
tcp        0      0 127.0.0.1:41720     127.0.0.1:3306      ESTABLISHED 
tcp        0      0 127.0.0.1:41736     127.0.0.1:3306      ESTABLISHED 
tcp        0      0 127.0.0.1:41718     127.0.0.1:3306      ESTABLISHED 
tcp        0      0 127.0.0.1:41724     127.0.0.1:3306      ESTABLISHED

【讨论】:

    【解决方案2】:

    您可以通过键入此查询来打开 MYSQL 控制台和查询。 例如,我为池添加了 10 个连接。连接的用户名是mafei_connection_test。然后您可以看到 MySQL 服务器创建并当前打开的所有连接。

    SHOW PROCESSLIST;
    
    mysql> SHOW PROCESSLIST;
    +------+-----------------------+------------------+--------------------+---------+------+------------------------+------------------+
    | Id   | User                  | Host             | db                 | Command | Time | State                  | Info             |
    +------+-----------------------+------------------+--------------------+---------+------+------------------------+------------------+
    |    5 | event_scheduler       | localhost        | NULL               | Daemon  | 6545 | Waiting on empty queue | NULL             |
    | 1315 | mafei_connection_test | 172.17.0.1:58828 | NULL               | Sleep   |   57 |                        | NULL             |
    | 1316 | mafei_connection_test | 172.17.0.1:58832 | NULL               | Sleep   |   59 |                        | NULL             |
    | 1317 | mafei_connection_test | 172.17.0.1:58836 | NULL               | Sleep   |   59 |                        | NULL             |
    | 1318 | mafei_connection_test | 172.17.0.1:58840 | NULL               | Sleep   |   59 |                        | NULL             |
    | 1319 | mafei_connection_test | 172.17.0.1:58844 | NULL               | Sleep   |   59 |                        | NULL             |
    | 1320 | mafei_connection_test | 172.17.0.1:58848 | NULL               | Sleep   |   59 |                        | NULL             |
    | 1321 | mafei_connection_test | 172.17.0.1:58852 | NULL               | Sleep   |   59 |                        | NULL             |
    | 1322 | mafei_connection_test | 172.17.0.1:58856 | NULL               | Sleep   |   59 |                        | NULL             |
    | 1323 | mafei_connection_test | 172.17.0.1:58860 | NULL               | Sleep   |   59 |                        | NULL             |
    | 1324 | mafei_connection_test | 172.17.0.1:58864 | NULL               | Sleep   |   59 |                        | NULL             |
    | 1326 | mafei_connection_test | 172.17.0.1:58872 | information_schema | Query   |    0 | init                   | SHOW PROCESSLIST |
    | 1327 | mafei_connection_test | 172.17.0.1:58876 | NULL               | Sleep   |   11 |                        | NULL             |
    +------+-----------------------+------------------+--------------------+---------+------+------------------------+------------------+
    13 rows in set (0.05 sec)
    
    

    【讨论】:

      【解决方案3】:

      参见 HikariCP 关于MySQL 的说明:

      已知 MySQL 数据源在网络超时支持方面存在问题。请改用 jdbcUrl 配置。

      您需要删除以下行,Hikari 会找到驱动程序

      hibernate.datasource.driver-class-name=com.mysql.jdbc.Driver
      

      jdbcUrl 该属性指示 HikariCP 使用“基于 DriverManager”的配置。我们觉得基于 DataSource 的配置(上)更胜一筹

      在使用Hibernate4时,还可以尝试按照建议添加以下内容:

      hibernate.hikari.dataSource.url=jdbc:mysql://localhost/database
      hibernate.hikari.dataSource.user=bart
      hibernate.hikari.dataSource.password=51mp50n
      

      【讨论】:

      【解决方案4】:
      1. 您是否尝试过使用该应用程序在数据库中插入/更新某些内容?如果失败,则无法正常工作。

      2. 另一种测试方法是将您在此处提供的数据源:hibernate.hikari.dataSource.url 更改为不存在的数据库。

      3. 最后把<Configuration status="WARN">改成<Configuration status="DEBUG">

      【讨论】:

      • 1.是的,我尝试将数据插入数据库,它工作正常,但我怎么知道连接池已建立? 2) . 你能详细说明一下吗 3). 是的,我也试过了
      • 尝试将 hibernate.hikari.dataSource.url 从 jdbc:mysql://localhost:3306/mydb 更改为 jdbc:mysql://idontexisthost:3306/mydb 以检查是否一切正常。另外,当您将某些内容插入数据库时​​,您是否会看到内容记录?
      猜你喜欢
      • 1970-01-01
      • 2015-12-17
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2013-08-10
      • 1970-01-01
      • 2015-07-25
      相关资源
      最近更新 更多