深入理解 Druid 数据库连接池配置
深入理解 Druid 数据库连接池配置
在现代应用程序中,数据库连接池是提高数据库访问性能和资源利用率的关键组件之一。Druid 是一个高性能的数据库连接池,广泛应用于 Java 应用程序中。本文将详细介绍如何配置 Druid 数据库连接池,并通过 properties
文件、YAML 文件和 XML 文件三种方式进行配置。
1. Druid 数据库连接池简介
Druid 是阿里巴巴开源的一款高性能的数据库连接池,具有以下特点:
- 高性能:Druid 在性能方面表现优异,能够处理大量的并发请求。
- 监控与统计:Druid 提供了丰富的监控和统计功能,帮助开发者了解数据库连接的使用情况。
- 安全性:Druid 内置了防火墙功能,可以有效防止 SQL 注入等安全问题。
2. Druid 配置文件格式
Druid 支持多种配置方式,包括通过 Java 代码配置、通过属性文件配置、通过 YAML 文件配置和通过 XML 配置。下面我们将详细介绍如何通过这三种配置文件格式来配置 Druid 连接池。
2.1 通过 properties
文件配置
在 druid.properties
文件中配置 Druid 连接池:
# 数据库连接配置 druid.url=jdbc:mysql://localhost:3306/your_database # 数据库连接URL druid.username=your_username # 数据库用户名 druid.password=your_password # 数据库密码 druid.driverClassName=com.mysql.cj.jdbc.Driver # 数据库驱动类名 # Druid 连接池配置 druid.initialSize=5 # 初始化时建立物理连接的个数 druid.minIdle=5 # 最小连接池数量 druid.maxActive=20 # 最大连接池数量 druid.maxWait=60000 # 获取连接时最大等待时间,单位毫秒 druid.timeBetweenEvictionRunsMillis=60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 druid.minEvictableIdleTimeMillis=300000 # 配置一个连接在池中最小生存的时间,单位是毫秒 druid.validationQuery=SELECT 1 # 用来检测连接是否有效的SQL druid.testWhileIdle=true # 建议配置为true,不影响性能,并且保证安全性 druid.testOnBorrow=false # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 druid.testOnReturn=false # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 druid.poolPreparedStatements=true # 是否缓存preparedStatement,也就是PSCache druid.maxPoolPreparedStatementPerConnectionSize=20 # 每个连接的最大PSCache数量 druid.filters=stat,wall,log4j # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
2.2 通过 YAML 文件配置
在 druid.yml
文件中配置 Druid 连接池:
druid: url: jdbc:mysql://localhost:3306/your_database # 数据库连接URL username: your_username # 数据库用户名 password: your_password # 数据库密码 driverClassName: com.mysql.cj.jdbc.Driver # 数据库驱动类名 initialSize: 5 # 初始化时建立物理连接的个数 minIdle: 5 # 最小连接池数量 maxActive: 20 # 最大连接池数量 maxWait: 60000 # 获取连接时最大等待时间,单位毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最小生存的时间,单位是毫秒 validationQuery: SELECT 1 # 用来检测连接是否有效的SQL testWhileIdle: true # 建议配置为true,不影响性能,并且保证安全性 testOnBorrow: false # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 testOnReturn: false # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 poolPreparedStatements: true # 是否缓存preparedStatement,也就是PSCache maxPoolPreparedStatementPerConnectionSize: 20 # 每个连接的最大PSCache数量 filters: stat,wall,log4j # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
2.3 通过 XML 文件配置
在 druid.xml
文件中配置 Druid 连接池:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 数据库连接配置 --> <property name="url" value="jdbc:mysql://localhost:3306/your_database"/> <!-- 数据库连接URL --> <property name="username" value="your_username"/> <!-- 数据库用户名 --> <property name="password" value="your_password"/> <!-- 数据库密码 --> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <!-- 数据库驱动类名 --> <!-- Druid 连接池配置 --> <property name="initialSize" value="5"/> <!-- 初始化时建立物理连接的个数 --> <property name="minIdle" value="5"/> <!-- 最小连接池数量 --> <property name="maxActive" value="20"/> <!-- 最大连接池数量 --> <property name="maxWait" value="60000"/> <!-- 获取连接时最大等待时间,单位毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000"/> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000"/> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="validationQuery" value="SELECT 1"/> <!-- 用来检测连接是否有效的SQL --> <property name="testWhileIdle" value="true"/> <!-- 建议配置为true,不影响性能,并且保证安全性 --> <property name="testOnBorrow" value="false"/> <!-- 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 --> <property name="testOnReturn" value="false"/> <!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 --> <property name="poolPreparedStatements" value="true"/> <!-- 是否缓存preparedStatement,也就是PSCache --> <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/> <!-- 每个连接的最大PSCache数量 --> <property name="filters" value="stat,wall,log4j"/> <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 --> </bean>
3. 配置参数详解
- url: 数据库连接URL,指定数据库的地址和数据库名称。
- username: 数据库用户名。
- password: 数据库密码。
- driverClassName: 数据库驱动类名,用于加载数据库驱动。
- initialSize: 初始化时建立物理连接的个数。
- minIdle: 最小连接池数量,连接池中保持的最小空闲连接数。
- maxActive: 最大连接池数量,连接池中允许的最大连接数。
- maxWait: 获取连接时最大等待时间,单位毫秒。
- timeBetweenEvictionRunsMillis: 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒。
- minEvictableIdleTimeMillis: 配置一个连接在池中最小生存的时间,单位是毫秒。
- validationQuery: 用来检测连接是否有效的SQL,通常是一个简单的查询语句。
- testWhileIdle: 建议配置为true,不影响性能,并且保证安全性。
- testOnBorrow: 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
- testOnReturn: 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
- poolPreparedStatements: 是否缓存preparedStatement,也就是PSCache。
- maxPoolPreparedStatementPerConnectionSize: 每个连接的最大PSCache数量。
- filters: 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙。
4. 总结
Druid 数据库连接池是一个功能强大且易于配置的工具,能够显著提高数据库访问的性能和安全性。通过本文的介绍,你可以了解到如何通过 properties
文件、YAML 文件和 XML 文件三种方式来配置 Druid 连接池,并理解每个配置参数的含义。希望本文能够帮助你在实际项目中更好地使用 Druid 数据库连接池。
分类:
Java SE
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库