JDBC Druid连接池的工具类

本文介绍了如何使用Druid连接池管理数据库连接,包括创建连接池、使用ThreadLocal优化线程内连接获取,以及配置DruidDataSource。通过预先创建并复用连接,提高了连接效率并避免资源浪费。
摘要由CSDN通过智能技术生成

为了防止连接的浪费,我们可以建立一个连接池,这个池中可以容纳一定数量的连接对象,一开始,我们可以先替用户先创建好一些连接对象,等用户要拿连接对象时,就直接从池中拿,不用新建了,这样也可以节省时间。然后用户用完后,放回去,别人可以接着用。可以提高连接的使用率。当池中的现有的连接都用完了,那么连接池可以向服务器申请新的连接放到池中。直到池中的连接达到“最大连接数”,就不能在申请新的连接了,如果没有拿到连接的用户只能等待。

  • 配置文件
# druid连接池需要的配置参数,key固定命名
driverClassName=com.mysql.cj.jdbc.Driver
username=用户名
password=密码
url=jdbc:mysql://localhost:3306/数据库名称
  • 工具类
package com.api.statement.Util;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * Description:
 *
 * @Author ghp
 * @Creat 2024/2/22 12:41
 * @Version 1.0
 */
public class JDBCUtil {
    /**
     * 连接池对象
     */
    public static DataSource dataSource;
    /**
     * ThreadLocal为线程本地变量,可以为同一个线程存储共享变量
     * 可以解决同一个线程只使用一个连接,不用穿参数
     */
    public static ThreadLocal<Connection> threadLocal;

    // 静态代码块,初始化执行一次
    static{
        Properties properties = new Properties();
        InputStream resourceAsStream = JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties");
        try {
            properties.load(resourceAsStream);
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static Connection getConnection() throws SQLException {
        Connection connection = threadLocal.get();
        if(connection == null){
             connection = dataSource.getConnection();
             threadLocal.set(connection);
        }
        return connection;
    }

    public static void closeConnection() throws SQLException {
        Connection connection = threadLocal.get();
        if(connection != null){
            threadLocal.remove();
            connection.setAutoCommit(true); // 将数据提交方式恢复
            connection.close();
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值