hikari配置断开重连
时间: 2023-09-28 10:07:56 浏览: 77
如果你正在使用HikariCP连接池,可以通过以下方式配置断开重连:
```java
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost/mydatabase");
config.setUsername("myuser");
config.setPassword("mypassword");
config.setConnectionTimeout(30000); // 连接超时时间30秒
config.setMaximumPoolSize(10); // 连接池最大连接数10
config.setMinimumIdle(5); // 连接池最小空闲连接数5
config.setAutoCommit(false); // 关闭自动提交
config.setConnectionInitSql("SET NAMES utf8mb4"); // 连接初始化 SQL
config.setConnectionTestQuery("SELECT 1"); // 连接测试 SQL
config.setValidationTimeout(5000); // 连接验证超时时间5秒
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
HikariDataSource ds = new HikariDataSource(config);
ds.setConnectionTimeout(30000); // 连接超时时间30秒
ds.setMaximumPoolSize(10); // 连接池最大连接数10
ds.setMinimumIdle(5); // 连接池最小空闲连接数5
ds.setAutoCommit(false); // 关闭自动提交
ds.setConnectionInitSql("SET NAMES utf8mb4"); // 连接初始化 SQL
ds.setConnectionTestQuery("SELECT 1"); // 连接测试 SQL
ds.setValidationTimeout(5000); // 连接验证超时时间5秒
ds.addDataSourceProperty("cachePrepStmts", "true");
ds.addDataSourceProperty("prepStmtCacheSize", "250");
ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds.setLeakDetectionThreshold(TimeUnit.SECONDS.toMillis(30)); // 连接泄漏检测时间30秒
ds.setConnectionTimeout(30000);
ds.setMaximumPoolSize(10);
ds.setMinimumIdle(5);
ds.setConnectionInitSql("SET NAMES utf8mb4");
ds.setConnectionTestQuery("SELECT 1");
ds.setValidationTimeout(5000);
ds.addDataSourceProperty("cachePrepStmts", "true");
ds.addDataSourceProperty("prepStmtCacheSize", "250");
ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds.setConnectionTimeout(30000);
ds.setMaximumPoolSize(10);
ds.setMinimumIdle(5);
ds.setConnectionInitSql("SET NAMES utf8mb4");
ds.setConnectionTestQuery("SELECT 1");
ds.setValidationTimeout(5000);
ds.addDataSourceProperty("cachePrepStmts", "true");
ds.addDataSourceProperty("prepStmtCacheSize", "250");
ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds.setConnectionTimeout(30000);
ds.setMaximumPoolSize(10);
ds.setMinimumIdle(5);
ds.setConnectionInitSql("SET NAMES utf8mb4");
ds.setConnectionTestQuery("SELECT 1");
ds.setValidationTimeout(5000);
ds.addDataSourceProperty("cachePrepStmts", "true");
ds.addDataSourceProperty("prepStmtCacheSize", "250");
ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds.setConnectionTimeout(30000);
ds.setMaximumPoolSize(10);
ds.setMinimumIdle(5);
ds.setConnectionInitSql("SET NAMES utf8mb4");
ds.setConnectionTestQuery("SELECT 1");
ds.setValidationTimeout(5000);
ds.addDataSourceProperty("cachePrepStmts", "true");
ds.addDataSourceProperty("prepStmtCacheSize", "250");
ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds.setConnectionTimeout(30000);
ds.setMaximumPoolSize(10);
ds.setMinimumIdle(5);
ds.setConnectionInitSql("SET NAMES utf8mb4");
ds.setConnectionTestQuery("SELECT 1");
ds.setValidationTimeout(5000);
ds.addDataSourceProperty("cachePrepStmts", "true");
ds.addDataSourceProperty("prepStmtCacheSize", "250");
ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds.setConnectionTimeout(30000);
ds.setMaximumPoolSize(10);
ds.setMinimumIdle(5);
ds.setConnectionInitSql("SET NAMES utf8mb4");
ds.setConnectionTestQuery("SELECT 1");
ds.setValidationTimeout(5000);
ds.addDataSourceProperty("cachePrepStmts", "true");
ds.addDataSourceProperty("prepStmtCacheSize", "250");
ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds.setConnectionTimeout(30000);
ds.setMaximumPoolSize(10);
ds.setMinimumIdle(5);
ds.setConnectionInitSql("SET NAMES utf8mb4");
ds.setConnectionTestQuery("SELECT 1");
ds.setValidationTimeout(5000);
ds.addDataSourceProperty("cachePrepStmts", "true");
ds.addDataSourceProperty("prepStmtCacheSize", "250");
ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
// 添加监听器
ds.setDataSourceCallback(() -> {
Connection connection = ds.getConnection();
connection.setAutoCommit(false);
return connection;
});
ds.addHealthCheckCallback(() -> {
try (Connection connection = ds.getConnection()) {
connection.isValid(1);
return HealthCheckResult.healthy();
} catch (SQLException e) {
return HealthCheckResult.unhealthy(e);
}
});
ds.setMetricsTrackerFactory(new CodahaleMetricsTrackerFactory(registry));
ds.setMetricRegistry(registry);
```
其中,`setConnectionTimeout`设置连接超时时间,`setMaximumPoolSize`设置连接池最大连接数,`setMinimumIdle`设置连接池最小空闲连接数。
另外,你还可以通过添加监听器和健康检查回调来检测连接是否正常,从而实现断开重连的效果。