Hel*_*oto 2 java jdbc spring-boot hikaricp
我在 SprintBoot 2 上配置了一个数据库连接(HikariCP)。我在application.properties 中定义了 poolName :
spring.datasource.hikari.poolName=HikariConnectionPool
Run Code Online (Sandbox Code Playgroud)
我想监视空闲 DB 连接的数量,所以我尝试创建一个线程来监视 DB 连接:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
但我收到一个异常,它无法找到 poolName HikariConnectionPool的实例。关于如何获得由 HikariCP 管理的空闲数据库连接的任何建议?
进一步分析,我可以看到 SpringBoot 实际上并没有在 JMX 中注册Pool bean。SpringBoot 只是在 JMX 中发布了HikariDataSource bean,它具有 Hikari dataSource 的静态配置。据我
所知,Hikari 支持 2 种不同的配置模式:1)通过 HikariConfig 类
配置 2)HikariDataSource
SpringBoot 的直接配置使用第二个选项。
我过去曾尝试过配置 HikariCP(无 SpringBoot)的第一个选项,该选项正在注册Pool和PoolConfig Beans.... Pool bean 是我感兴趣的一个,它具有连接的使用。
有人知道我如何在 SpringBoot 中将 HikariDataSource 配置为选项(1 - HikariConfig 类)?或者以某种方式 springboot 创建一个Pool Bean?
谢谢。
获取 HikariCP 管理的空闲 DB 连接,首先获取Spring Boot使用的 HikariPool
HikariPool hikariPool = (HikariPool) new DirectFieldAccessor(getDataSource()).getPropertyValue("pool");
Run Code Online (Sandbox Code Playgroud)
然后使用HikariPool方法获取当前空闲连接状态:
hikariPool.getIdleConnections();
Run Code Online (Sandbox Code Playgroud)
由 HikariConfig 初始化见Hikari 的初始化
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
config.setUsername("bart");
..
HikariDataSource ds = new HikariDataSource(config);