【问题标题】:Modify Hikari properties at runtime在运行时修改 Hikari 属性
【发布时间】:2018-03-15 13:52:27
【问题描述】:

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

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

后来我会这样做

config.setConnectionTimeout(5000);

Hikari 尝试在 12 秒而不是 5 秒内建立新连接。

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

【问题讨论】:

    标签: connection-timeout hikaricp


    【解决方案1】:

    你可以通过 MX bean 做到这一点,但你不需要使用 JMX

    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
    }
    

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

    var config = new HikariConfig();
    ...
    config.setAllowPoolSuspension(true);
    

    【讨论】:

      【解决方案2】:

      您不能通过在配置对象上重置属性值来动态更新属性值 - 配置对象最终会在实例化 Hikari 池时读取一次(查看PoolBase.java 中的源代码以了解其工作原理。

      但是,您可以做任何您想做的事,并在运行时通过 JMX 更新连接超时值。 hikari 文档 here

      中解释了如何执行此操作

      【讨论】:

        猜你喜欢
        • 2011-06-16
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多