在运行时修改Hikari属性

时间:2018-03-15 13:52:27

标签: connection-timeout hikaricp

在哪里可以找到有关可在运行时修改的Hikari属性的信息? 我试图修改 connectionTimeout 。我可以这样做,它将在HikariDataSource中进行修改,没有异常(通过设置检查然后获取属性),但它不起作用。 如果我最初这样做:

HikariConfig config = new HikariConfig();
config.setConnectionTimeout(12000);
HikariDataSource pool = new HikariDataSource(config);

以后我做

config.setConnectionTimeout(5000);

Hikari尝试连接12秒而不是5秒。

或者有没有办法改变价值? 是否有其他属性具有相同的行为?

2 个答案:

答案 0 :(得分:1)

您无法通过在配置对象上重置属性值来动态更新属性值 - 在实例化Hikari池时最终会读取一次配置对象(请查看PoolBase.java中的源代码以查看这是如何运作的。

但是,您可以执行所需操作并通过JMX在运行时更新连接超时值。如何执行此操作在hikari文档here

中进行了解释

答案 1 :(得分:0)

您可以通过MX bean执行此操作,但无需使用JMX

sudo chmod 777 path/to/folder/of/file/specificFile.ext

请记住,您需要在初始配置中启用池挂起

public void updateTimeout(final long connectionTimeoutMs, final HikariDataSource ds) {
    var poolBean = ds.getHikariPoolMXBean();
    var configBean = ds.getHikariConfigMXBean();
    
    poolBean.suspendPool(); // Block new connections being leased
    
    configBean.setConnectionTimeout(connectionTimeoutMs);
    
    poolBean.softEvictConnections(); // Close unused cnxns & mark open ones for disposal
    poolBean.resumePool(); // Re-enable connections
}