All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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