Druid 数据库连接池工具类代码

Druid 是一款由阿里巴巴开源的数据库连接池和监控库。它为应用程序提供了高性能、可靠的数据库连接管理,同时还包含了强大的连接池监控和统计功能。以下是 Druid 的主要特点和功能:

  1. 高性能: Druid 数据库连接池采用了一系列优化策略,包括连接复用、预处理、并发控制等,以提供高性能的数据库连接管理。

  2. 连接池管理: Druid 自动管理数据库连接的创建、复用和释放,有效地减少了数据库连接的创建和销毁开销。

  3. 连接池监控: Druid 提供了丰富的连接池监控功能,包括活动连接数、空闲连接数、连接等待队列、连接获取次数等。

  4. 连接池统计: Druid 支持连接池的统计功能,可以获取连接的平均等待时间、最大等待时间、最小等待时间等。

  5. 连接池过滤器: Druid 具有多种内置的过滤器,用于监控和统计连接池的性能,如监控 SQL 信息、防火墙等。

  6. 支持 JMX: Druid 支持 JMX(Java Management Extensions),可以通过 JMX 进行连接池的监控和管理。

  7. 防 SQL 注入: Druid 提供了内置的 SQL 防火墙功能,可以有效地防止 SQL 注入攻击。

  8. 配置灵活: Druid 的配置灵活且易于理解,你可以根据项目需求调整连接池的参数。

  9. 支持异步执行: Druid 具有异步执行 SQL 的能力,可以提高应用程序的响应性能。

  10. 扩展性: Druid 可以通过定制插件和扩展来满足不同的需求,如连接池的拦截、扩展等。

  11. 集成 Spring Boot: 对于 Spring Boot 项目,Druid 提供了方便的集成和自动配置,简化了连接池的配置和管理。

总的来说,Druid 是一个功能强大、性能优越的数据库连接池,适用于各种规模的应用程序。它不仅提供了连接池管理的功能,还包含了详尽的监控和统计功能,可以帮助开发人员更好地管理和优化数据库连接。你可以通过阿里巴巴的官方文档了解更多关于 Druid 的详细信息和使用方式。

DbUtils代码如下:

package com.util;

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

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

public class DbUtils {
    private static DruidDataSource ds;
    private static final ThreadLocal THREAD_LOCAL = new ThreadLocal<>();

    // 静态初始化块,用于初始化数据库连接池
    static {
        Properties properties = new Properties();
        // 从类加载器获取配置文件输入流
        InputStream resourceAsStream = DbUtils.class.getClassLoader().getResourceAsStream("db.properties");
        try {
            properties.load(resourceAsStream);
            // 创建 Druid 数据库连接池
            ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    // 获取数据库连接
    public static Connection getConnection() {
        Connection connection = THREAD_LOCAL.get();
        try {
            if (connection == null) {
                connection = ds.getConnection();
                THREAD_LOCAL.set(connection);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return connection;
    }

    // 开启事务
    public static void begin() {
        Connection connection = null;
        try {
            connection = getConnection();
            connection.setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 提交事务
    public static void commit() {
        Connection connection = null;
        try {
            connection = getConnection();
            connection.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeAll(connection, null, null);
        }
    }

    // 回滚事务
    public static void rollback() {
        Connection connection = null;
        try {
            connection = getConnection();
            connection.rollback();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeAll(connection, null, null);
        }
    }

    // 关闭数据库连接、语句和结果集
    public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
            THREAD_LOCAL.remove(); // 清除当前线程的连接
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

你可能感兴趣的:(数据库,java)