千家信息网

Java数据库连接池Druid的配置参数有哪些

发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要介绍"Java数据库连接池Druid的配置参数有哪些",在日常操作中,相信很多人在Java数据库连接池Druid的配置参数有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2025年11月14日Java数据库连接池Druid的配置参数有哪些

这篇文章主要介绍"Java数据库连接池Druid的配置参数有哪些",在日常操作中,相信很多人在Java数据库连接池Druid的配置参数有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java数据库连接池Druid的配置参数有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、配置参数

Druid 连接池的配置参数兼容 DBCP,个别配置的语意有所区别。

配置缺省值说明
name配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this)。配置此属性版本至少为 1.0.5,低于该版本设置 name 会出错。
url连接数据库的 url
username连接数据库的用户名
password连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
driverClassName根据url自动识别这一项可配可不配,如果不配置 Druid 会根据 url 自动识别 dbType,然后选择相应的 driverClassName
initialSize0初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
maxActive8最大连接池数量
maxIdle8已经不再使用,配置了也没效果
minIdle最小连接池数量
maxWait获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock 属性为 true 使用非公平锁。
poolPreparedStatementsfalse是否缓存 preparedStatement,也就是 PSCache。PSCache 对支持游标的数据库性能提升巨大,比如说 oracle。在 mysql 下建议关闭。
maxPoolPreparedStatementPerConnectionSize-1要启用 PSCache,必须配置大于 0,当大于 0 时,poolPreparedStatements 自动触发修改为 true。在 Druid 中,不会存在 Oracle下 PSCache 占用内存过多的问题,可以把这个数值配置大一些,比如说 100
validationQuery用来检测连接是否有效的 sql,要求是一个查询语句,常用select 'x'。如果 validationQuery 为 null,testOnBorrow、testOnReturn、testWhileIdle 都不会起作用。
validationQueryTimeout单位:秒,检测连接是否有效的超时时间。底层调用 jdbc Statement对象的 void setQueryTimeout(int seconds) 方法
testOnBorrowtrue申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
testOnReturnfalse归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
testWhileIdlefalse建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,执行validationQuery 检测连接是否有效。
keepAlivefalse
(1.0.28)
连接池中的 minIdle 数量以内的连接,空闲时间超过 minEvictableIdleTimeMillis,则会执行 keepAlive 操作。
timeBetweenEvictionRunsMillis1分钟(1.0.14)有两个含义:
1) Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于 minEvictableIdleTimeMillis 则关闭物理连接。
2) testWhileIdle 的判断依据,详细看 testWhileIdle 属性的说明
numTestsPerEvictionRun30分钟(1.0.14)不再使用,一个 DruidDataSource 只支持一个 EvictionRun
minEvictableIdleTimeMillis连接保持空闲而不被驱逐的最小时间
connectionInitSqls物理连接初始化的时候执行的 sql
exceptionSorter根据dbType自动识别当数据库抛出一些不可恢复的异常时,抛弃连接
filters属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
监控统计用的 filter:stat
日志用的 filter:log4j
防御 sql 注入的 filter:wall
proxyFilters类型是List,如果同时配置了 filters 和 proxyFilters,是组合关系,并非替换关系

2、使用

2.1、直接使用

2.1.1、引入依赖
    com.alibaba    druid    1.2.8
2.1.2、使用例子
package com.abc.demo.general.dbpool;import com.alibaba.druid.pool.DruidDataSource;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DruidCase {    public static void main(String[] args) {        DruidDataSource druidDataSource = new DruidDataSource();        Connection connection = null;        try {            druidDataSource.setName("测试连接池");            druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");            druidDataSource.setUrl("jdbc:mysql://10.40.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8");            druidDataSource.setUsername("root");            druidDataSource.setPassword("123456");            druidDataSource.setInitialSize(2);            druidDataSource.setMinIdle(2);            druidDataSource.setMaxActive(5);            druidDataSource.setValidationQuery("select 1");            druidDataSource.setTestWhileIdle(true);            druidDataSource.setTestOnBorrow(true);            druidDataSource.setTestOnReturn(false);            druidDataSource.setMaxWait(6000);            druidDataSource.setFilters("slf4j");            connection = druidDataSource.getConnection();            Statement st = connection.createStatement();            ResultSet rs = st.executeQuery("select version()");            if (rs.next()) {                System.out.println(rs.getString(1));            }        } catch (SQLException e) {            e.printStackTrace();        } finally {            close(connection);        }        //实际使用中一般是在应用启动时初始化数据源,应用从数据源中获取连接;并不会关闭数据源。        druidDataSource.close();    }    private static void close(Connection connection) {        if (connection != null) {            try {                connection.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }}

2.2、在 SpringBoot 中使用

2.1.1、引入依赖
    org.springframework.boot    spring-boot-starter-parent    2.3.12.RELEASE                org.springframework.boot        spring-boot-starter-web                org.springframework        spring-jdbc                com.alibaba        druid-spring-boot-starter        1.2.8                mysql        mysql-connector-java    
2.1.2、单数据源

application.yml 配置:

spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://10.40.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8    username: root    password: 123456    type: com.alibaba.druid.pool.DruidDataSource    druid:      initial-size: 2      min-idle: 2      max-active: 5      validation-query: select 1      test-while-idle: true      test-on-borrow: true      test-on-return: false      max-wait: 6000      filter: slf4j

使用:

@Autowiredprivate DataSource dataSource;
2.1.3、多数据源

application.yml 配置:

spring:  datasource:    druid:      db1:        driver-class-name: com.mysql.cj.jdbc.Driver        url: jdbc:mysql://10.140.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8        username: root        password: 123456        initial-size: 2        min-idle: 2        max-active: 5        validation-query: select 1        test-while-idle: true        test-on-borrow: true        test-on-return: false        max-wait: 6000        filter: slf4j      db2:        driver-class-name: com.mysql.cj.jdbc.Driver        url: jdbc:mysql://10.40.9.12:3306/mydb?useUnicode=true&characterEncoding=UTF-8        username: root        password: 123456        initial-size: 2        min-idle: 2        max-active: 5        validation-query: select 1        test-while-idle: true        test-on-borrow: true        test-on-return: false        max-wait: 6000        filter: slf4j

数据源配置类:

package com.abc.demo.config;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import javax.sql.DataSource;@Configurationpublic class DataSourceConfig {    @Primary    @Bean("dataSource1")    @ConfigurationProperties("spring.datasource.druid.db1")    public DataSource dataSourceOne(){        return DruidDataSourceBuilder.create().build();    }    @Bean("dataSource2")    @ConfigurationProperties("spring.datasource.druid.db2")    public DataSource dataSourceTwo(){        return DruidDataSourceBuilder.create().build();    }}

使用:

@Autowired@Qualifier("dataSource1")private DataSource dataSource1;@Autowired@Qualifier("dataSource2")private DataSource dataSource2;
2.1.4、开启监控功能

Druid 内置了一些监控,Spring Boot 环境下通过少量配置就可开启这些功能。

application.yml 配置:

spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://10.40.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8    username: root    password: InsYR0ot187!    type: com.alibaba.druid.pool.DruidDataSource    druid:      initial-size: 2      min-idle: 2      max-active: 5      validation-query: select 1      test-while-idle: true      test-on-borrow: true      test-on-return: false      max-wait: 6000      filter: slf4j,stat,wall #启用日志、监控统计、防火墙功能      web-stat-filter:    #web监控配置        enabled: true      stat-view-servlet:  #监控页面配置        enabled: true        url-pattern: /druid/*

监控页面:

到此,关于"Java数据库连接池Druid的配置参数有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0