
com.huaweicloud.dws.client.worker.DwsConnectionPool Maven / Gradle / Ivy
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
*/
package com.huaweicloud.dws.client.worker;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.huaweicloud.dws.client.DwsConfig;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
* @ProjectName: dws-connectors
* @Description: 封装JDBC连接池
* @Date: 2023/12/6 16:27
**/
@Slf4j
public class DwsConnectionPool {
private final DruidDataSource dataSource;
static {
DriverManager.getDrivers();
}
@SneakyThrows
public DwsConnectionPool(DwsConfig dwsConfig) {
Properties properties = new Properties();
properties.put("url", dwsConfig.getUrl());
properties.put("username", dwsConfig.getUsername());
properties.put("password", dwsConfig.getPassword());
properties.put("driverClassName", dwsConfig.getDriverName());
properties.put("maxWait", String.valueOf(dwsConfig.getConnectionPoolTimeout()));
properties.put("maxActive", String.valueOf(dwsConfig.getConnectionPoolSize()));
properties.put("initialSize", String.valueOf(dwsConfig.getConnectionPoolSize()));
properties.put("minIdle", String.valueOf(dwsConfig.getConnectionPoolSize()));
properties.put("validationQuery", "SELECT 1;");
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
// 设置sql超时时间
dataSource.setSocketTimeout(dwsConfig.getConnectionSocketTimeout());
dataSource.setConnectTimeout((int) dwsConfig.getConnectionPoolTimeout());
dataSource.setName(dwsConfig.getConnectionPoolName());
dataSource.setKeepAlive(true);
// 设置单个连接最大使用次数,避免长时间在一个节点上执行
dataSource.setPhyMaxUseCount(dwsConfig.getConnectionMaxUseCount());
dataSource.init();
}
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public void close() {
dataSource.close();
log.info("dataSource: {}, connection pool closed...", dataSource);
}
public void monitor(String tableName) {
log.info("tableName: {}, data source connection info: {}", tableName, dataSource.dump());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy