gpt4 book ai didi

java - SpringBoot 2 - 监控数据库连接

转载 作者:行者123 更新时间:2023-12-05 01:17:25 25 4
gpt4 key购买 nike

我已经在 SprintBoot 2 上配置了一个数据库连接 (HikariCP)。我在 application.properties 中定义了 poolName:

spring.datasource.hikari.poolName=HikariConnectionPool

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

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中注册Pool bean。SpringBoot只是在JMX中发布HikariDataSource bean,它有Hikari dataSource的静态配置。据我所知,Hikari 支持两种不同的配置模式:
1) 通过 HikariConfig 类进行配置
2) 直接配置 HikariDataSource
SpringBoot 使用的是第二个选项。
我在过去尝试过配置 HikariCP(无 SpringBoot)的第一个选项,它正在注册 PoolPoolConfig Beans.... Pool bean是我感兴趣的连接用法。

有谁知道我如何在 SpringBoot 中将 HikariDataSource 配置为选项(1 - HikariConfig 类)?或者以某种方式通过 springboot 创建一个 Pool Bean?

谢谢。

最佳答案

要获取“由 HikariCP 管理的空闲数据库连接,首先获取 Spring Boot 使用的 HikariPool

HikariPool hikariPool = (HikariPool) new DirectFieldAccessor(getDataSource()).getPropertyValue("pool");

然后使用HikariPool获取当前空闲连接状态的方法:

hikariPool.getIdleConnections();

对于 HikariConfig 的初始化,请参阅 Hikari's initialization

HikariConfig config = new HikariConfig();

config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");

config.setUsername("bart");

..

HikariDataSource ds = new HikariDataSource(config);

关于java - SpringBoot 2 - 监控数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50770462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com