首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpringBoot 2-监控数据库连接

SpringBoot 2-监控数据库连接
EN

Stack Overflow用户
提问于 2018-06-09 10:43:59
回答 2查看 10.5K关注 0票数 2

我已在application.properties中定义了SprintBoot 2上的DB连接(HikariCP)

代码语言:javascript
复制
spring.datasource.hikari.poolName=HikariConnectionPool

我想监控空闲数据库连接的数量,所以我尝试创建一个线程来监控数据库连接,如下所示:

代码语言:javascript
复制
public class HikariCPStatistics implements Runnable {

    public static final Logger logger = LoggerFactory.getLogger(HikariCPStatistics.class);

    private static HikariPoolMXBean poolProxy;

    public HikariCPStatistics() {
            MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
            try {
                    ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (HikariConnectionPool)");
                    poolProxy = JMX.newMXBeanProxy(mBeanServer, poolName, HikariPoolMXBean.class);

            } catch (MalformedObjectNameException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            }
    }

    @Override
    public void run() {
            logger.info("Starting Connection Pool status monitor");
            while ( true ) {
                    logger.info("Hikari - Idle Connections: " + poolProxy.getIdleConnections());
                    try {
                            Thread.sleep(5000);
                    } catch (InterruptedException e) {
                            logger.error("Fail to run Connection Pool status monitor");
                            e.printStackTrace();
                    }
            }

    }

}

但是我得到了一个异常,它找不到poolName HikariConnectionPool.的实例关于如何获得由HikariCP管理的空闲数据库连接,有什么建议吗?

进一步分析,我可以看到SpringBoot实际上并没有在中注册JMX bean。SpringBoot只在JMX中发布Hikari bean,它具有Hikari dataSource的静态配置。在我看来,Hikari支持两种不同的配置模式:

1)通过HikariConfig类进行配置

2)直接配置HikariDataSource

SpringBoot使用的是第二种选择。

我在过去尝试过配置HikariCP (无SpringBoot)的第一个选项,该选项是注册PoolConfig Bean...我感兴趣的是 bean,它具有连接的用法。

有人知道如何在SpringBoot中配置as option (1 - HikariConfig类)安装的HikariDataSource吗?或者以某种方式启动来创建一个 Bean?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-06-09 15:59:35

您可以从注入HikariDataSource的Hikari连接池中获取大量信息。即使是作为一个列表。

代码语言:javascript
复制
private final List<HikariDataSource> hikariConfigMXBeans;

infos like name = hikariDataSource.getPoolName();
idleTimeout = hikariDataSource.getIdleTimeout();
validationTimeout = hikariDataSource.getValidationTimeout();
connectionTimeout = hikariDataSource.getConnectionTimeout();
leakDetectionThreshold = hikariDataSource.getLeakDetectionThreshold();
maxLifetime = hikariDataSource.getMaxLifetime();
minimumIdle = hikariDataSource.getMinimumIdle();
maxPoolSize = hikariDataSource.getMaximumPoolSize();

从这里很容易创建一个执行器端点来显示此信息。

希望这是你需要监控的信息

票数 1
EN

Stack Overflow用户

发布于 2019-08-29 18:25:25

这就是我监视连接池的方式

代码语言:javascript
复制
        HikariPool hikariPool = (HikariPool)
                new DirectFieldAccessor(dataSource).getPropertyValue("pool");

        //Getting pool connection info
        logger.info(" hikariPool getActiveConnections : " + hikariPool.getActiveConnections());
        logger.info(" hikariPool getTotalConnections : " + hikariPool.getTotalConnections());
        logger.info(" hikariPool getIdleConnections : " + hikariPool.getIdleConnections());
        logger.info(" hikariPool getThreadsAwaitingConnection : " + hikariPool.getThreadsAwaitingConnection());

        //Getting maximum pool size - set from properties
        Integer t= new HikariDataSourcePoolMetadata((HikariDataSource) dataSource).getMax();
        logger.info(" hikariPool Maximum Pool Size : " + t.toString());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50770462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档