Druid 连接池

druid.properties       //配置文件
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC
username=root
password=
initialSize=5
maxActive=10
maxWait=3000
配置文件注意和connection时的参数有点不同
DruidDemo1
package cn.Druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

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

public class DruidDemo1 {
    public static void main(String[] args) throws Exception {
        //1.导入jar包
        //2.定义配置文件
        //3.加载配置文件
        Properties pro=new Properties();
        InputStream is=DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        //4.获取连接池对象
        DataSource ds= DruidDataSourceFactory.createDataSource(pro);

        //5.获取连接
        Connection conn= ds.getConnection();
        System.out.println(conn);
    }

}

version-2.0
JDBCUtils
package cn.utils;

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

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

/**
 * Druid连接池的工具类
 */
public class JDBCUtils {
    //1.定义成员变量 DataSource
    private static DataSource ds;

    static {
        //1.加载配置文件
        Properties pro=new Properties();
        try {
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //2.获取DataSource
            ds= DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取连接
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
    /**
     * 释放资源
     */
    public static void close(Statement stmt, Connection conn){
/*        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }*/
        close(null,stmt,conn);

    }
    public static void close(ResultSet rs,Statement stmt, Connection conn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();  //归还连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
    /**
     * 获取连接池方法
     */
    public static DataSource getDataSource(){
        return ds;
    }
}


DruidDemo2
package cn.Druid;

import cn.utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * 使用新的工具类
 */
public class DruidDemo2 {
    public static void main(String[] args) {
        /**
         * 完成添加操作,给bank添加一条数据
         */
        //1获取连接
        Connection conn=null;
        PreparedStatement pstmt=null;
        try {
            conn = JDBCUtils.getConnection();
            //2.定义sql
            String sql="insert into bank values(null,?,?)";
            //3.获取pstmt对象
            pstmt=conn.prepareStatement(sql);
            //4.给?赋值
            pstmt.setString(1,"Demo10");
            pstmt.setInt(2,3000);
            //5.执行sql
            int count =pstmt.executeUpdate();
            System.out.println(count);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //6.释放资源
            JDBCUtils.close(pstmt,conn);
        }

    }
}

<think>好的,我现在需要帮助用户了解如何配置和使用Druid数据库连接池。首先,我应该回顾一下用户提供的引用内容,确保准确引用相关信息。 用户提到了四个引用,其中引用[1]介绍了Druid的基本信息和优点,引用[2]和[4]涉及SpringBoot整合Druid的步骤,引用[3]提到了一些Druid的高级特性。用户的问题集中在如何使用和配置Druid,所以重点应放在依赖添加、配置步骤和监控配置上。 首先,我需要整理添加依赖的步骤。根据引用[4],需要添加Druid的Spring Boot Starter依赖,版本为1.2.18。同时,引用[2]指出SpringBoot默认支持其他连接池但不包括Druid,所以必须明确添加依赖。 接下来是配置文件的部分。在SpringBoot中,通常使用application.properties或application.yml。需要配置数据库连接的基本信息,如URL、用户名、密码、驱动类,以及Druid特定的配置,比如初始化大小、最大连接数等。这部分在引用[1]和[2]中都有提到,尤其是引用[2]的案例可能提供了示例配置。 然后是配置监控功能。Druid的一个主要优势是监控,所以需要启用内置的StatViewServlet和WebStatFilter。引用[1]提到Druid有日志监控功能,引用[2]和[4]可能涉及如何在SpringBoot中配置这些监控组件。需要指导用户如何通过配置类或属性文件来开启监控页面,并设置访问路径、用户名和密码。 另外,可能还需要提到Druid的其他特性,比如SQL防火墙、防御注入攻击等,如引用[3]所述的高级功能,但用户可能更关注基础配置,所以这部分可以作为优化或高级配置提及。 最后,生成相关问题时要围绕Druid的配置、监控、优化以及与SpringBoot的整合。确保问题覆盖用户可能进一步感兴趣的方面,比如性能调优、监控指标解读、与其他连接池的对比等。 需要确保回答结构清晰,分步骤说明,同时正确引用提供的资料。例如,在添加依赖时引用[4],在配置监控时引用[1]和[2]。同时,注意使用正确的LaTeX格式,但根据用户问题,可能数学公式较少,但如果有变量或代码块,需正确格式化。 检查是否存在错误,比如版本号是否正确,配置属性是否匹配Druid的最新文档。由于引用中的版本是1.2.18,需确认该版本是否仍然适用,或者是否需要更新,但用户提供的引用可能已固定,所以按引用内容处理。 总结步骤:添加依赖→配置连接参数→配置监控→验证配置。每个步骤都需要简明扼要,给出代码示例,并引用相关段落。</think>### 如何使用和配置 Druid 数据库连接池? #### 1. **添加依赖** 在项目的 `pom.xml` 文件中添加 Druid 的 Spring Boot Starter 依赖(版本以实际需求为准)[^4]: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.18</version> </dependency> ``` #### 2. **配置数据库连接参数** 在 `application.properties` 或 `application.yml` 中配置数据库连接信息及 Druid 参数[^2]: ```properties # 基础配置 spring.datasource.url=jdbc:mysql://localhost:3306/test_db spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Druid 连接池配置 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.initial-size=5 spring.datasource.druid.min-idle=5 spring.datasource.druid.max-active=20 spring.datasource.druid.max-wait=60000 ``` #### 3. **启用监控功能** Druid 提供内置的监控页面,需通过配置类启用: ```java @Configuration public class DruidConfig { @Bean public ServletRegistrationBean<StatViewServlet> statViewServlet() { ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); // 设置监控页面的登录账号和密码 bean.addInitParameter("loginUsername", "admin"); bean.addInitParameter("loginPassword", "admin"); return bean; } @Bean public FilterRegistrationBean<WebStatFilter> webStatFilter() { FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>(new WebStatFilter()); bean.addUrlPatterns("/*"); bean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,/druid/*"); return bean; } } ``` 监控页面默认路径为 `http://localhost:8080/druid`,可查看 SQL 执行性能、连接池状态等[^1]。 #### 4. **高级配置(可选)** - **防御 SQL 注入**:启用过滤器: ```properties spring.datasource.druid.filters=stat,wall ``` - **配置慢 SQL 日志**: ```properties spring.datasource.druid.filter.stat.slow-sql-millis=2000 spring.datasource.druid.filter.stat.log-slow-sql=true ``` #### 5. **验证配置** 启动应用后,访问监控页面并执行数据库操作,观察连接池状态和 SQL 执行日志[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值