我已在application.properties中定义了SprintBoot 2上的DB连接(HikariCP)
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 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?
谢谢。
发布于 2018-06-09 15:59:35
您可以从注入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();从这里很容易创建一个执行器端点来显示此信息。
希望这是你需要监控的信息
发布于 2019-08-29 18:25:25
这就是我监视连接池的方式
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());https://stackoverflow.com/questions/50770462
复制相似问题