当模拟网络连接失败几秒钟时尝试挂起HikariCP池时会引发异常。为何不能暂停泳池呢?是否有其他简单的方法来模拟丢失的网络连接(本地主机上的MySQL服务器)?
Configuration:
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=falseJUnit
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发布于 2017-09-06 13:48:16
默认情况下,不允许挂起池,需要显式启用池挂起。
也请参阅文档
❎
allowPoolSuspension此属性控制池是否可以通过JMX挂起并恢复。这对于某些故障转移自动化方案非常有用。当池被挂起时,对getConnection()的调用不会超时,并将一直保持到池被恢复。缺省值: false
简单地说,加上:
config.setAllowPoolSuspension(true)发布于 2017-09-07 20:28:28
这些都是很好的答案。不幸的是,暂停池并不是模拟网络中断的好方法。取决于您是在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 DROPhttps://stackoverflow.com/questions/46076786
复制相似问题