Skip to content

Commit

Permalink
Use Hikari Connection Pool for handling Clickhouse connections
Browse files Browse the repository at this point in the history
  • Loading branch information
subkanthi committed Oct 31, 2024
1 parent 57c59fe commit eb46e45
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 1 deletion.
5 changes: 5 additions & 0 deletions sink-connector/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,11 @@
<artifactId>maven-artifact</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>com.clickhouse</groupId>
<!-- or clickhouse-grpc-client if you prefer gRPC -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.clickhouse.jdbc.ClickHouseConnection;
import com.clickhouse.jdbc.ClickHouseDataSource;


import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.ZoneId;
Expand Down Expand Up @@ -106,8 +107,16 @@ public static ClickHouseConnection createConnection(String url, String clientNam
Properties userProps = splitJdbcProperties(jdbcParams);
properties.putAll(userProps);
}
// Add username/password to the url.
url = url + "?user=" + userName + "&password=" + password;
ClickHouseDataSource dataSource = new ClickHouseDataSource(url, properties);
conn = dataSource.getConnection(userName, password);
// Get connection from the pool.
HikariDbSource hikariDbSource = HikariDbSource.getInstance(dataSource);
// Create a new ClickHouseConnection object with the connection from the pool.
// Convert Connection to ClickHouseConnection.

conn = (ClickHouseConnection) hikariDbSource.getConnection();
//conn = dataSource.getConnection(userName, password);
} catch (Exception e) {
log.error("Error creating ClickHouse connection" + e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.altinity.clickhouse.sink.connector.db;

import com.clickhouse.jdbc.ClickHouseDataSource;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.SQLException;

// Singleton class to manage the Hikari connection pool
public class HikariDbSource {

private HikariDataSource dataSource;


public HikariDbSource(HikariDataSource dataSource, String jdbcUrl, String username, String password) {

this.dataSource = dataSource;

HikariConfig poolConfig = new HikariConfig();
poolConfig.setConnectionTimeout(5000L);
poolConfig.setMaximumPoolSize(20);
poolConfig.setMaxLifetime(300_000L);
poolConfig.setDataSource(new ClickHouseDataSource(dataSource.getJdbcUrl(), dataSource.getUsername(), dataSource.getPassword()));

HikariDataSource ds = new HikariDataSource(poolConfig);
}

public Connection getConnection() throws SQLException {
return this.dataSource.getConnection();
}
}

0 comments on commit eb46e45

Please sign in to comment.