我在SprintBoot 2上配置了数据库连接(HikariCP)。 我在 application.properties :
中定义了poolNamespring.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支持2种不同的配置模式:
1)配置虽然HikariConfig类
2)直接配置HikariDataSource
SpringBoot正在使用第二个选项
我在过去尝试过配置HikariCP(没有SpringBoot)的第一个选项,它注册了 Pool 和 PoolConfig Beans .... Pool bean是我感兴趣的具有连接用途的那个。
有没有人知道如何在SpringBoot中配置选项(1 - HikariConfig类)设置HikariDataSource?或者以某种方式springboot创建池 Bean?
感谢。
答案 0 :(得分:0)
您可以从注入HikariDataSource的Hikari连接池中获取大量信息。即使是列表。
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 :(得分:0)
要获取由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 =新的HikariDataSource(config);
答案 2 :(得分:0)
这就是我监视连接池的方式
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());