• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗的软件工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

深入理解 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 数据库连接池。

posted on 2024-12-09 18:22  周政然  阅读(2835)  评论(1)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3