This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new ba0f1518f1f Use connection pool for JDBCRepository (#20247)
ba0f1518f1f is described below

commit ba0f1518f1f4ef980202cc7e8539a58f930d7dba
Author: 小马哥 <[email protected]>
AuthorDate: Wed Aug 17 22:30:20 2022 +0800

    Use connection pool for JDBCRepository (#20247)
---
 .../pom.xml                                        |  6 +++
 .../repository/standalone/jdbc/JDBCRepository.java | 46 +++++++++++++---------
 2 files changed, 33 insertions(+), 19 deletions(-)

diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-repository/shardingsphere-standalone-mode-repository-provider/shardingsphere-standalone-mode-repository-jdbc/shardingsphere-standalone-mode-repository-jdbc-core/pom.xml
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-repository/shardingsphere-standalone-mode-repository-provider/shardingsphere-standalone-mode-re
 [...]
index 5299816f6d5..0cbe598e40a 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-repository/shardingsphere-standalone-mode-repository-provider/shardingsphere-standalone-mode-repository-jdbc/shardingsphere-standalone-mode-repository-jdbc-core/pom.xml
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-repository/shardingsphere-standalone-mode-repository-provider/shardingsphere-standalone-mode-repository-jdbc/shardingsphere-standalone-mode-repository-jdbc-core/pom.xml
@@ -32,5 +32,11 @@
             
<artifactId>shardingsphere-standalone-mode-repository-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+        
+        <dependency>
+            <groupId>com.zaxxer</groupId>
+            <artifactId>HikariCP</artifactId>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-repository/shardingsphere-standalone-mode-repository-provider/shardingsphere-standalone-mode-repository-jdbc/shardingsphere-standalone-mode-repository-jdbc-core/src/main/java/org/apache/shardingsphere/mode/repository/standalone/jdbc/JDBCRepository.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-repository/
 [...]
index e603700e5c4..0d01991a121 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-repository/shardingsphere-standalone-mode-repository-provider/shardingsphere-standalone-mode-repository-jdbc/shardingsphere-standalone-mode-repository-jdbc-core/src/main/java/org/apache/shardingsphere/mode/repository/standalone/jdbc/JDBCRepository.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-repository/shardingsphere-standalone-mode-repository-provider/shardingsphere-standalone-mode-repository-jdbc/shardingsphere-standalone-mode-repository-jdbc-core/src/main/java/org/apache/shardingsphere/mode/repository/standalone/jdbc/JDBCRepository.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.mode.repository.standalone.jdbc;
 
 import com.google.common.base.Strings;
+import com.zaxxer.hikari.HikariDataSource;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import 
org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepository;
@@ -27,7 +28,6 @@ import 
org.apache.shardingsphere.mode.repository.standalone.jdbc.provider.JDBCRe
 import 
org.apache.shardingsphere.mode.repository.standalone.jdbc.provider.JDBCRepositoryProviderFactory;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -48,18 +48,22 @@ public final class JDBCRepository implements 
StandalonePersistRepository {
     
     private static final String SEPARATOR = "/";
     
-    private Connection connection;
-    
     private JDBCRepositoryProvider provider;
     
+    private HikariDataSource hikariDataSource;
+    
     @SneakyThrows
     @Override
     public void init(final Properties props) {
         JDBCRepositoryProperties jdbcRepositoryProps = new 
JDBCRepositoryProperties(props);
-        connection = 
DriverManager.getConnection(jdbcRepositoryProps.getValue(JDBCRepositoryPropertyKey.JDBC_URL),
-                
jdbcRepositoryProps.getValue(JDBCRepositoryPropertyKey.USERNAME), 
jdbcRepositoryProps.getValue(JDBCRepositoryPropertyKey.PASSWORD));
-        provider = 
JDBCRepositoryProviderFactory.getInstance(jdbcRepositoryProps.getValue(JDBCRepositoryPropertyKey.PROVIDER));
-        try (Statement statement = connection.createStatement()) {
+        hikariDataSource = new HikariDataSource();
+        
hikariDataSource.setJdbcUrl(jdbcRepositoryProps.getValue(JDBCRepositoryPropertyKey.JDBC_URL));
+        
hikariDataSource.setUsername(jdbcRepositoryProps.getValue(JDBCRepositoryPropertyKey.USERNAME));
+        
hikariDataSource.setPassword(jdbcRepositoryProps.getValue(JDBCRepositoryPropertyKey.PASSWORD));
+        try (
+                Connection connection = hikariDataSource.getConnection();
+                Statement statement = connection.createStatement()) {
+            provider = 
JDBCRepositoryProviderFactory.getInstance(jdbcRepositoryProps.getValue(JDBCRepositoryPropertyKey.PROVIDER));
             statement.execute(provider.dropTableSQL());
             statement.execute(provider.createTableSQL());
         }
@@ -67,7 +71,9 @@ public final class JDBCRepository implements 
StandalonePersistRepository {
     
     @Override
     public String get(final String key) {
-        try (PreparedStatement preparedStatement = 
connection.prepareStatement(provider.selectByKeySQL())) {
+        try (
+                Connection connection = hikariDataSource.getConnection();
+                PreparedStatement preparedStatement = 
connection.prepareStatement(provider.selectByKeySQL())) {
             preparedStatement.setString(1, key);
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 if (resultSet.next()) {
@@ -82,7 +88,9 @@ public final class JDBCRepository implements 
StandalonePersistRepository {
     
     @Override
     public List<String> getChildrenKeys(final String key) {
-        try (PreparedStatement preparedStatement = 
connection.prepareStatement(provider.selectByParentKeySQL())) {
+        try (
+                Connection connection = hikariDataSource.getConnection();
+                PreparedStatement preparedStatement = 
connection.prepareStatement(provider.selectByParentKeySQL())) {
             preparedStatement.setString(1, key);
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 List<String> resultChildren = new LinkedList<>();
@@ -133,7 +141,9 @@ public final class JDBCRepository implements 
StandalonePersistRepository {
     }
     
     private void insert(final String key, final String value, final String 
parent) throws SQLException {
-        try (PreparedStatement preparedStatement = 
connection.prepareStatement(provider.insertSQL())) {
+        try (
+                Connection connection = hikariDataSource.getConnection();
+                PreparedStatement preparedStatement = 
connection.prepareStatement(provider.insertSQL())) {
             preparedStatement.setString(1, UUID.randomUUID().toString());
             preparedStatement.setString(2, key);
             preparedStatement.setString(3, value);
@@ -143,7 +153,9 @@ public final class JDBCRepository implements 
StandalonePersistRepository {
     }
     
     private void update(final String key, final String value) throws 
SQLException {
-        try (PreparedStatement preparedStatement = 
connection.prepareStatement(provider.updateSQL())) {
+        try (
+                Connection connection = hikariDataSource.getConnection();
+                PreparedStatement preparedStatement = 
connection.prepareStatement(provider.updateSQL())) {
             preparedStatement.setString(1, value);
             preparedStatement.setString(2, key);
             preparedStatement.executeUpdate();
@@ -152,7 +164,9 @@ public final class JDBCRepository implements 
StandalonePersistRepository {
     
     @Override
     public void delete(final String key) {
-        try (PreparedStatement preparedStatement = 
connection.prepareStatement(provider.deleteSQL())) {
+        try (
+                Connection connection = hikariDataSource.getConnection();
+                PreparedStatement preparedStatement = 
connection.prepareStatement(provider.deleteSQL())) {
             preparedStatement.setString(1, key);
             preparedStatement.executeUpdate();
         } catch (final SQLException ex) {
@@ -162,13 +176,7 @@ public final class JDBCRepository implements 
StandalonePersistRepository {
     
     @Override
     public void close() {
-        try {
-            if (null != connection) {
-                connection.close();
-            }
-        } catch (final SQLException ex) {
-            log.error(String.format("Failed to release %s database 
resources.", getType()), ex);
-        }
+        hikariDataSource.close();
     }
     
     @Override

Reply via email to