数据库连接池基础知识学习

笔者对于数据库连接池也是初学,写这篇文章的主要目的是方便自己去理解数据库连接池的相关内容,所以有些描述并不是那么专业和全面,请多多包涵。

一、数据库连接池概述

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

数据库连接池就是一个容器,里面存放着许多数据库连接。当用户访问数据库时,便从数据库连接池里面寻找相应的数据库连接,当用户使用完成后,便归还数据库连接。
使用数据库连接池可以节约资源,并且是用户的访问更高效,因为不用重复创建数据库连接。

二、数据库连接池的使用

目前主流的数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等等,关于它们之间的比较可以参考大佬的博客主流Java数据库连接池比较与开发配置实战。具体选用哪一种可根据实际情况来,推荐Druid和DBCP。

Druid的使用

Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池。
使用Druid,首先得下载并导入相应的jar包,druid下载。在导入jar包后要进行相应的配置,配置方法可参考大佬的博客Druid(德鲁伊)数据池配置文件详解以及简单的实现,建议采用配置文件的方法。然后就是加载配置文件(配置文件可放在项目的任意目录下)。
完成上面的准备工作后,就可以根据DruidDataSourceFactory获取数据库连接池对象,然后再通过getConnection获取数据库连接。具体实现,见下面代码:

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

public class DruidTest {

    public static void main(String[] args) throws Exception {

        //加载配置文件
        Properties properties = new Properties();
        InputStream inputStream =
                DruidTest.class.getClassLoader().getResourceAsStream("druid.properties");
        properties.load(inputStream);

        //获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        //获取连接
        Connection connection = dataSource.getConnection();

        //输出,测试一下
        System.out.println(connection);
    }
}

也可以构造一个druid工具类以简化操作,避免在不同的类里面每次都要写实现druid的相关代码。druid工具类代码如下所示:

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * druid连接池工具类
 */
public class JDBCUtils {

    private static DataSource dataSource;

    static {
        //加载配置文件
        Properties properties = new Properties();
        InputStream inputStream =
                JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
        try {
            properties.load(inputStream);

            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    //获取连接
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    //释放资源
    public static void close(Statement statement, Connection connection) throws SQLException {

        close(null, statement, connection);

    }

    //释放资源
    public static void close(ResultSet resultSet, Statement statement, Connection connection)
            throws SQLException {
        if (resultSet != null) {
            resultSet.close();
        }

        if (statement != null) {
            statement.close();
        }

        if (connection != null) {
            //注意这里是归还数据库连接,而不是关闭
            connection.close();
        }
    }


    //获取连接池
    public static DataSource getDataSource() {
        return dataSource;
    }


}

以后再使用druid时,只需调用改工具类的相关方法即可,很方便。

在这里插入图片描述
2019.12.22

发布了52 篇原创文章 · 获赞 59 · 访问量 6826

猜你喜欢

转载自blog.csdn.net/ataraxy_/article/details/103651457
今日推荐