当前位置: 首页 > 知识库问答 >
问题:

无法暂停 HikariCP

黄跃
2023-03-14

在模拟网络连接失败几秒钟的情况下,尝试暂停HikariCP池时会引发异常。为什么泳池可以不可以暂停?有没有其他简单的方法来模拟丢失的网络连接(到本地主机上的MySQL服务器)?

配置:

final String configFile = "src/main/resources/db.properties";
HikariConfig config = new HikariConfig(configFile);
config.setRegisterMbeans(true);
config.setPoolName("hikari-pool-1");
ds = new HikariDataSource(config);

属性:

jdbcUrl=jdbc:mysql://localhost:3306/db?user=user&password=password
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
dataSource.useLocalSessionState=true
dataSource.useLocalTransactionState=true
dataSource.rewriteBatchedStatements=true
dataSource.cacheResultSetMetadata=true
dataSource.cacheServerConfiguration=true
dataSource.elideSetAutoCommits=true
dataSource.maintainTimeStats=false

JUnit:

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (hikari-pool-1)");
HikariPoolMXBean poolProxy = JMX.newMXBeanProxy(mBeanServer, poolName, HikariPoolMXBean.class);
poolProxy.suspendPool();

例外

java.lang.IllegalStateException: hikari-pool-1 - is not suspendable

共有2个答案

韶英达
2023-03-14

这些都是很棒的回答。不幸的是,暂停池并不是模拟网络中断的好方法。根据您使用的是Windows、Linux还是Mac,可能会有不同的选项。

在Linux上,模拟网络故障的最佳方法是启用/禁用防火墙规则,该规则会将流量丢弃(而不是拒绝)到MySQL端口

iptables -A INPUT -i lo -p tcp --dport 3306 -j DROP

并且禁用(移除块)将如下所示:

iptables -D INPUT -i lo -p tcp --dport 3306 -j DROP
谢洛城
2023-03-14

默认情况下,不允许暂停池,您需要显式启用池暂停。

另请参阅留档:

allowpoolsuspension
该属性控制是否可以通过JMX暂停和恢复池。这对于某些故障转移自动化场景非常有用。当池挂起时,对< code>getConnection()的调用将不会超时,并将一直保持到池恢复。默认值:false

简而言之,补充:

config.setAllowPoolSuspension(true)
 类似资料:
  • 我想暂停Kafka听众。 我叫http://localhost:8080/pause暂停容器 我发送有关主题的数据。 消费者开始消费消息 我原以为消费者会被暂停,但Kafka主题的信息仍在阅读中。如何暂停消费者?我用的是2.5。0(Spring启动父级)

  • 暂停脚本的当前线程。 #p::Pause ; 按一次 Win+P 会暂停脚本. 再按一次则取消暂停. Pause [, On|Off|Toggle, OperateOnUnderlyingThread?] 参数 On|Off|Toggle 如果为空或省略, 则它默认为 Toggle. 否则, 请指定下列单词的其中一个: Toggle:如果在当前线程下的潜在线程处于运行状态,则暂停当前线程,否则让潜

  • 1.若要暂停训练,请按下该按钮。显示暂停。若要继续训练,请点击绿色箭头图标。 2.若要停止训练,在记录训练期间或处于暂停模式时长按该按钮三秒钟,直至计数器清零。或者您可以点击并按住显示屏上的红色停止按钮。 如果在暂停后停止训练,则暂停后经过的时间不包括在总训练时间内。

  • 若要暂停训练 长按正面按钮 或 在训练视图中向右滑动,找出并轻触暂停图标。 通过向左滑动您可以在暂停模式中看到训练总结。 恢复暂停的训练 轻触绿色箭头图标。 停止训练 在训练期间或在暂停模式中,长按正面按钮直至绿色计时器一直倒数。 或 在暂停模式中,轻触并按住红色停止图标可结束记录。

  • 1.若要暂停训练,请按“返回”按钮。显示“记录已暂停”。若要继续训练,请按“开始”。 2.若要停止训练,在训练记录或处于暂停模式时长按“返回”按钮三秒钟,直到显示“记录已结束”。 如果在暂停后停止训练,则暂停后经过的时间不包括在总训练时间内。

  • 我现在正在用JavaFX制作一个游戏。我只是想知道如何才能暂停动画计时器。我按键盘上的一个键,计时器会暂停,如果再按一次,它会恢复。有可能这样做吗?提前谢了。 之后我再次尝试使用timer.stop()和timer.start(),但计时器只停止,再也不会启动。