当前位置: 首页 > 知识库问答 >
问题:

获取HikariDataSource上的活动连接

陶星渊
2023-03-14

我正在试图弄清楚目前有多少连接被打开,但我似乎找不到一个明显的方法来使用Hikari实现这一点。

Hikaripool公开了这些信息(getActiveConnections),但我没有看到从HikariDataSource访问这些信息的简单方法。

共有3个答案

国高杰
2023-03-14

您可以使用以下类更好的监控:

            import javax.sql.DataSource;
            import org.aspectj.lang.JoinPoint;
            import org.aspectj.lang.annotation.After;
            import org.aspectj.lang.annotation.Aspect;
            import org.aspectj.lang.annotation.Before;
            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.stereotype.Component;
            import com.zaxxer.hikari.HikariDataSource;
            import com.zaxxer.hikari.pool.HikariPool;
            import lombok.extern.slf4j.Slf4j;


            @Aspect
            @Component
            @Slf4j
            public class DataSourceAspectLogger {

                private HikariPool pool;

                @Autowired
                private HikariDataSource ds;

                @Before("execution(* com.x.common.sql.repo.*.*(..))")
                public void logBeforeConnection(JoinPoint jp) throws Throwable {
                    logDataSourceInfos("Before", jp);
                }

                @After("execution(* com.x.common.sql.repo.*.*(..)) ")
                public void logAfterConnection(JoinPoint jp) throws Throwable {
                    logDataSourceInfos("After", jp);
                }

                @Autowired
                public void getPool() {
                    try {
                        java.lang.reflect.Field field = ds.getClass().getDeclaredField("pool");
                        field.setAccessible(true);
                        this.pool = (HikariPool) field.get(ds);
                    } catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                }

                public void logDataSourceInfos(final String time, final JoinPoint jp) {
                    final String method = String.format("%s:%s", jp.getTarget().getClass().getName(), jp.getSignature().getName());
                    int totalConnections = pool.getTotalConnections();
                    int activeConnections = pool.getActiveConnections();
                    int freeConnections = totalConnections - activeConnections;
                    int connectionWaiting = pool.getThreadsAwaitingConnection();
                    log.info(String.format("%s %s: number of connections in use by the application (active): %d.", time, method, activeConnections));
                    log.info(String.format("%s %s: the number of established but idle connections: %d.", time, method, freeConnections));
                    log.info(String.format("%s %s: number of threads waiting for a connection: %d.", time, method, connectionWaiting));
                    log.info(String.format("%s %s: max pool size: %d.", time, method, ds.getMaximumPoolSize()));
                }
            }
壤驷麒
2023-03-14

您必须通过JMX编程访问来获取它。首先,通过registerMbeans属性或调用setRegisterMans()来启用MBean注册。然后查阅本页了解如何执行编程访问:

https://github.com/brettwooldridge/HikariCP/wiki/JMX-Monitoring

闻人昊昊
2023-03-14

如果您使用的是spring boot:

new HikariDataSourcePoolMetadata(dataSource).getActive();
 类似资料:
  • 问题内容: 请问一个简单的问题,我完全是Java和android开发人员的初学者。调用surfaceChanged时,如何在setCameraDisplayOrientation中获取Activity的实例? 问题答案: 这是一种使用静态变量避免内存泄漏的方法:静态引用将在onCreate(Bundle)方法中设置的Activity实例。 在您的中学班级中写下如下内容: 然后在Activity类的

  • 目前,我正在使用电子邮件确认的用户注册表单。 我已经设法启动我的应用程序使用链接在电子邮件,但我不知道如何获得链接的用户点击启动我的应用程序。

  • 我正在尝试获取Spring BootHikari池中的活动连接数。在我的日志中,它打印了两个池,命名为和。 我正在尝试使用执行器信息endpoint获取该数据。 我得到的全部错误是 java.lang.RuntimeException:javax.management。InstanceNotFoundException:com.zaxxer。hikari:type=池(HikariPool-1)

  • Flask-SocketIO同样支持连接和断开的活动。接下来的例子将会展示怎样为他们注册一个处理函数: @socketio.on('connect', namespace='/chat') def test_connect(): emit('my response', {'data': 'Connected'}) @socketio.on('disconnected', namespace

  • 问题内容: 在我的控制器中,当我需要活动(登录)用户时,我正在执行以下操作以获取UserDetails实现: 它工作正常,但我认为Spring在这种情况下可以使生活更轻松。有没有办法将自动接线连接到控制器或方法中? 例如,类似: 但是我得到了,而不是得到了? 我正在寻找一种优雅的解决方案。有任何想法吗? 问题答案: 序言:从Spring-Security 3.2开始,此答案的末尾描述了一个不错的注

  • 库中有一个从javascript(html5应用程序)调用的类。它不能是活动扩展器。该类可以访问活动和WebView对象。 是否可以从这个库类中获取onResume、on暂停和onDestroy活动事件?