Unverified Commit 28034d48 authored by xiaofeng's avatar xiaofeng Committed by GitHub

Using connection pooling to fix jdbc multi-connection problem (#873)

Co-authored-by: 's avatarliuxiaofeng <liuxiaofeng@xcxd.com>
parent 2bfb8b63
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId> <artifactId>druid-spring-boot-starter</artifactId>
<scope>provided</scope>
</dependency> </dependency>
</dependencies> </dependencies>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
package com.dlink.metadata.driver; package com.dlink.metadata.driver;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.SQLStatement;
import com.dlink.assertion.Asserts; import com.dlink.assertion.Asserts;
...@@ -49,6 +50,8 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -49,6 +50,8 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
protected Connection conn; protected Connection conn;
private DruidDataSource dataSource;
abstract String getDriverClass(); abstract String getDriverClass();
@Override @Override
...@@ -64,11 +67,51 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -64,11 +67,51 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
return CommonConstant.HEALTHY; return CommonConstant.HEALTHY;
} }
public DruidDataSource getDataSource() throws SQLException {
if (null == dataSource) {
synchronized (this) {
if (null == dataSource) {
this.dataSource = new DruidDataSource();
assembleConfig(config);
dataSource.init();
}
}
}
return dataSource;
}
public Driver setDriverConfig(DriverConfig config) {
this.config = config;
try {
this.dataSource = getDataSource();
} catch (SQLException e) {
throw new RuntimeException(e);
}
assembleConfig(config);
return this;
}
private void assembleConfig(DriverConfig config) {
dataSource.setName(config.getName());
dataSource.setUrl(config.getUrl());
dataSource.setDriverClassName(getDriverClass());
dataSource.setUsername(config.getUsername());
dataSource.setPassword(config.getPassword());
dataSource.setValidationQuery("select 1");
dataSource.setTestOnBorrow(true);
dataSource.setTestWhileIdle(true);
dataSource.setBreakAfterAcquireFailure(true);
dataSource.setFailFast(true);
dataSource.setInitialSize(1);
dataSource.setMaxActive(8);
dataSource.setMinIdle(5);
}
@Override @Override
public Driver connect() { public Driver connect() {
try { try {
Class.forName(getDriverClass()); Class.forName(getDriverClass());
conn = DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword()); conn = getDataSource().getConnection();
} catch (ClassNotFoundException | SQLException e) { } catch (ClassNotFoundException | SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment