我已经在 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)的第一个选项,它正在注册 Pool 和 PoolConfig 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/