例子:1
spring:
#数据库配置
datasource:
#这里使用的是德鲁伊数据库连接池
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url:
username:
password:
#初始连接数量
initial-size: 20
#最小连接数量
min-idle: 20
#最大连接数量
max-active: 1000
#获取连接等待超时的时间 单位是毫秒,这里配置60秒
max-wait: 60000
#查询超时时间 单位是毫秒 这里配置6秒,如果你查询数据量大的情况下这个配置的大一点,不然查询报错抛出异常
query-timeout: 6000
#事务发生回滚后多长时间响应用户单位是毫秒,这里这个时间和mysql的innodb_lock_wait_timeout是相加的关系,如果你在mysql配置文件配置了这个时间,那时间就会相加
transaction-query-timeout: 2000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒, 这里配置10分钟去检测一次是否存在空闲连接
time-between-eviction-runs-millis: 600000
#最大等待线程数量 这里配置50,当你的连接满了之后,其他的连接进入等待池子,最大的数量为50,超过这个数量的线程舍弃掉
max-wait-thread-count: 50
#最小连接时间,也就是说一条线程的空闲时间超过了这个数就会被关闭,这里的单位是毫秒,这里设置为10分钟
min-evictable-idle-time-millis: 600000
#最大连接时间,也就是说一条线程的空闲时间>最小连接时间,也>最大连接时间,直接关闭 这里设置为30分钟
max-evictable-idle-time-millis: 1800000
#申请连接时直接检测连接是否有效
test-on-borrow: true
#申请连接时检测空闲时间,根据空闲时间再检测连接是否有效
test-while-idle: true
#归还连接时检测连接是否有效,这个配置生产最好不要配置设置为ture,有性能问题
test-on-return: true
#初始连接失败是否抛出异常
init-exception-throw: true
#开启检查运行的状态
check-execute-time: true
#这里是健康检查sql语句,配合下面的使用
validation-query: SELECT 1 FROM DUAL
#多长时间进行一次心跳去检查是否连接了mysql,这里配置为30分钟
validation-query-timeout: 1800000
#连接出错后在尝试3次
connection-error-retry-attempts: 3
#数据库宕机后启用重连机制,true表示失败后立即断开,false表示失败后进行断线重连尝试,配合上面的重连次数
break-after-acquire-failure: false
#重连的间隔 单位毫秒 这里设置30分钟重连
time-between-connect-error-millis: 1800000
#开启保持连接有效性
keep-alive: true
#只有空闲时间大于keep-alive-between-time-millis并且小于min-evictable-idle-time-millis该参数才会有用,单位为毫秒 这里设置为15分钟
#这个时间必须大于检测时间time-between-eviction-runs-millis
keep-alive-between-time-millis: 900000
#这个目前不知道做什么的,字面意思看是杀死什么时候的读的socket超时时间
#kill-when-socket-read-timeout:
例子2:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb
username: myuser
password: mypass
druid:
# 连接池初始化时创建的连接数。
# 应根据实际应用场景设置,确保应用程序启动时即可获取数据库连接。
initial-size: 5
# 连接池中最小的空闲连接数,保证即使在低负载时也有足够的连接可用。
min-idle: 5
# 连接池中最大活动连接数,限制并发请求时的数据库连接数,避免过多的连接消耗系统资源。
max-active: 20
# 获取连接时的最大等待时间,超过该时间则抛出异常。单位通常为毫秒。
max-wait: 60000
# 两个连接检查之间的时间间隔,用于检测和清理空闲过久的连接。单位为毫秒。
time-between-eviction-runs-millis: 60000
# 连接在被清理前的最小空闲时间。单位为毫秒。
min-evictable-idle-time-millis: 300000
# 用于验证连接有效性的 SQL 查询语句。
validation-query: SELECT 1 FROM DUAL
# 如果为真,则连接空闲时会被定期测试有效性。
test-while-idle: true
# 如果为真,在获取连接前进行有效性测试。
test-on-borrow: false
# 如果为真,在归还连接时进行有效性测试。
test-on-return: false
# 是否开启 PreparedStatement 缓存。
pool-prepared-statements: true
# 单个连接上缓存的 PreparedStatement 最大数量。
max-pool-prepared-statement-per-connection-size: 20
# 指定要启用的过滤器,如 stat, log4j, wall 等,用于监控和日志记录。
filters: stat,wall,log4j
# 连接属性,例如配置日志级别或慢 SQL 阈值。
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 是否自动回收超时连接
remove-abandoned: true
# 超时时间,单位秒
remove-abandoned-timeout: 1800
# 是否记录被遗弃的连接
log-abandoned: true
# StatViewServlet配置,访问监控页面
stat-view-servlet:
enabled: true
url-pattern: /druid/*
login-username: admin
login-password: admin
reset-enable: false
# 防火墙配置
wall:
config:
multi-statement-allow: false
Druid 数据库连接池参数详解
-
基本连接信息
- druid.datasource.url:数据库的 URL 地址,这是连接数据库时必不可少的配置项。在应用与数据库建立连接的过程中,通过该 URL 指定具体的数据库实例,是较为常见且基础的配置内容。
- druid.datasource.username:数据库的用户名,用于验证应用访问数据库的身份。
- druid.datasource.password:数据库的密码,与用户名配合使用,确保只有授权的应用才能访问数据库。
- druid.datasource.driverClassName:数据库驱动类名,它是应用与数据库之间通信的桥梁,指定了连接数据库所需的驱动程序。
-
连接池大小相关参数
- druid.initialSize:初始连接池大小。当应用启动时,Druid 连接池会依据此参数值预先创建相应数量的数据库物理连接。这一机制能够保证应用在首次请求数据库连接时,能够迅速获取已准备好的连接,有效提升响应速度,增强系统性能,避免了在请求到来时才创建连接所带来的延迟问题。
- druid.minIdle:最小连接池大小。Druid 连接池会定期检查空闲连接数量,若当前空闲连接数低于此参数设定的值,连接池会自动创建新的连接。即使在系统处于低负载状态时,也能保证有足够的空闲连接可供快速复用,从而在遇到突发流量时,显著减少因创建新连接而产生的延迟,提升系统的响应速度和稳定性。
- druid.maxActive:最大连接池大小,是连接池配置中的关键参数。它定义了连接池中允许同时存在的最大活动连接数,即当前正在被应用程序使用的数据库连接数量。一旦达到这个上限,后续的连接请求将会被阻塞或拒绝,直到有活动连接被释放回连接池。例如,若 maxActive 设置为 100,则连接池最多能同时处理 100 个数据库操作请求。当应用程序尝试打开的连接数超过该限制时,根据连接池的具体实现和配置,可能会出现等待直到有连接释放(若设置了最大等待时间)、抛出异常或从备用数据源获取连接等情况。
-
连接等待与超时参数
- druid.maxWait:等待连接的最大毫秒数,若超过该时间仍未获取到连接,则会抛出异常。此参数用于控制应用程序在连接池已满的情况下请求数据库连接时的最大等待时长。合理配置该参数有助于平衡系统响应速度与资源利用率,确保服务的稳定性和良好的用户体验,单位为毫秒。
-
连接检测与清理参数
- druid.timeBetweenEvictionRunsMillis:连接空闲多久后检查其有效性,是连接池执行连接检测和清理的周期间隔时间,单位为毫秒。连接池会按照这个指定的时间段对池中的连接进行检查,依据配置的测试条件(如验证查询 SQL)判断连接是否有效、空闲时间是否过长或满足其他自定义检查条件。对于无效或不再需要的连接,会将其关闭并从连接池中移除,以保证连接池中始终是健康、可用的数据库连接。该参数对于维持连接池的高效运行和数据库连接的稳定性至关重要,通过及时回收问题连接,可有效避免因使用不良连接导致的数据库操作失败,提升系统的整体健壮性和性能。同时,需合理设置该参数,避免检测频率过高而造成不必要的资源消耗。
- druid.minEvictableIdleTimeMillis:连接在池中最小生存时间,是连接池配置中的一个重要参数。它用于设定连接在池中空闲的最短时间,若空闲时间超过此参数设置的值,在下次连接回收检查时,该连接将会被移除,单位为毫秒。这意味着即使连接状态正常,但如果其空闲时间过长,超过了设定值,连接池也会将其关闭并移除,从而避免资源浪费,保持连接池的 “新鲜度”。此参数通常与 timeBetweenEvictionRunsMillis 配合使用,共同管理连接池中连接的生命周期,确保不会有过多不必要的连接长期占用资源。合理设置这两个参数,可有效利用系统资源,提高数据库访问效率,并避免因连接闲置过久而引发的潜在问题。
-
连接验证相关参数
- druid.testWhileIdle:是否在空闲时验证连接。若设置为 true,连接池会在每次检查空闲连接时(按照 timeBetweenEvictionRunsMillis 设定的周期),执行验证查询或其他检查手段,以确认这些连接是否仍然有效。若连接被判定为失效,会立即将其从连接池中移除,从而有效防止应用程序使用到不可用的数据库连接。启用该参数可以显著提高应用的稳定性,因为它能够提前发现并移除那些由于网络波动、数据库重启等原因导致的不可用连接,避免在实际执行数据库操作时出现问题。然而,启用此功能也会带来一定的性能开销,因为每个检查周期都需要消耗一定资源来测试连接的有效性。因此,在设置该参数时,需要在维护连接健康性和系统资源消耗之间进行权衡。
- druid.testOnBorrow:获取连接时是否测试连接。该参数决定了在从连接池中借取一个连接给应用程序使用之前,是否需要先进行连接有效性测试。若设置为 true,每当应用程序请求一个连接时,连接池会先执行一次连接测试,例如执行一个简单的 SQL 查询或预定义的验证语句,只有通过测试的连接才会被分配给应用使用。启用此功能可以有效防止因提供给应用的连接已损坏而导致的运行时错误,提高应用程序的健壮性。但同时,这也会增加每次获取连接时的额外延迟,因为需要执行验证操作,尤其在高并发场景下,可能会对性能产生一定影响。
- druid.testOnReturn:归还连接时是否测试连接。该参数用于指定当应用程序使用完数据库连接并将其归还到连接池时,是否对其进行连接有效性检查。若设置为 true,每次连接归还到连接池时,连接池都会执行一次验证,以确定该连接的健康状况。此参数的主要作用是确保有问题的连接不会被错误地放回连接池,避免再次分配出去导致应用层的数据库操作失败。通过及时发现并处理使用过程中可能变得不稳定的连接,可维护连接池的整体健康状态。不过,执行该测试同样会带来一定的性能开销,特别是在连接频繁获取和释放的场景下。因此,是否启用该参数应根据实际应用场景的需求和性能考量来决定,对于对数据库连接即时可靠性要求严格的系统,该参数可能更为适用。
-
过滤器相关参数
- druid.filters:启用的过滤器,例如监控(StatFilter)和 SQL 防火墙(WallFilter)等。该参数是 Druid 数据库连接池配置中用于指定启用哪些过滤器的部分。这些过滤器作为插件,能够增强连接池的功能,实现性能监控、日志记录、安全防护等多种功能。通过合理配置不同的过滤器组合,可以优化连接池管理和数据库访问,提升系统的安全性和问题诊断能力,提高系统运维效率。
-
统计相关参数
- druid.stat.sql.maxSize:记录 SQL 最大长度,是 Druid 连接池中的一个配置项。它用于限制记录到统计信息中的 SQL 语句的最大长度。当 SQL 语句的长度超过此配置值时,Druid 的统计模块将不会完整记录该 SQL 语句,可能会进行截断或不记录,以避免占用过多内存资源。在处理大量长 SQL 或复杂查询的应用场景中,合理配置该参数有助于在保持数据库访问统计信息的同时,有效管理内存使用,平衡统计需求与系统资源的合理利用。
- druid.stat.mergeSql:是否合并相同 SQL 的统计。当设置为 true 时,Druid 会自动识别并合并具有相同结构(忽略参数值差异)的 SQL 语句统计信息,这对于存在大量参数化查询的应用非常实用。这样做可以减少统计条目的数量,使监控界面和统计报告更加简洁清晰,同时降低内存消耗。若设置为 false,Druid 会分别统计每个带有不同参数的 SQL 变体。该配置有助于优化统计分析的效率和易读性。
-
SQL 防火墙相关参数
- druid.wall.filter.config.file:WallFilter 的配置文件路径,是 Druid 连接池中关于 SQL 防火墙(Wall Filter)的一个配置项。它用于指定 SQL 防火墙配置文件的位置,允许用户通过外部 XML 或 properties 文件来自定义 SQL 防火墙的行为,详细设定哪些 SQL 操作应该被允许或禁止,例如是否允许删除操作、修改表结构等,从而增强数据库的安全防护能力。当设置该参数后,Druid 的 Wall Filter 会在初始化时加载指定文件中的配置规则,执行更细致的 SQL 安全策略检查,如阻止潜在的 SQL 注入攻击、限制危险的 SQL 操作等。通过外部配置文件,管理员可以灵活调整安全策略,而无需直接修改代码或连接池的基本配置,提高了系统的可维护性和安全性。
-
连接遗弃相关参数
- druid.logAbandoned:是否记录被遗弃的连接,是 Druid 数据库连接池的一个配置属性。当设置为 true 时,如果应用程序未能正确关闭数据库连接,导致连接在超时后被连接池回收,Druid 会将这些未正常关闭的连接信息记录到日志中。这有助于开发者发现并修复程序中存在的未关闭连接的资源泄露问题,避免潜在的连接池耗尽风险和性能下降,增强对连接使用情况的监控和问题排查能力。
- druid.removeAbandoned:是否自动回收超时连接,用于指示是否自动移除被应用程序遗弃的数据库连接。当设置为 true 时,Druid 连接池会定期检查是否存在超时且未被正确关闭的连接(即应用程序打开后未关闭的连接),并将这些遗弃的连接从连接池中移除。这一机制可有效防止因程序疏忽未关闭连接而导致的连接泄漏,避免连接池资源耗尽,保障数据库访问的稳定性和系统整体性能。合理配置该参数有助于有效管理数据库资源。
- druid.removeAbandonedTimeout:超时时间,单位为秒。该参数用于设置识别和移除遗弃连接的超时时间阈值。当 druid.removeAbandoned 设置为 true 时,Druid 会监控连接的使用情况。若某个连接被 Checkout(从连接池取出)后,空闲时间超过了该参数指定的时长,且未被归还到连接池,Druid 会认定该连接被遗弃,并依据此配置自动移除它。该设置有助于及时回收不再使用的连接资源,防止资源泄露,确保连接池的高效运行和系统的稳定性。
-
监控界面相关参数
- druid.stat-view-servlet.enabled=true:启用 Druid 连接池的监控 Servlet 功能。当设置为 true 后,可通过 Web 界面查看 Druid 提供的数据库连接池统计信息,包括活跃连接数、线程池状态、SQL 执行情况等,这对于监控和诊断应用的数据库访问性能非常有帮助。设置该参数后,还需根据其他相关配置(如 URL 路径、登录凭证等)来访问 Druid 的监控页面。
- druid.stat-view-servlet.url-pattern=/druid/*:该配置项指定了 Druid 监控界面的访问 URL 路径模式。通过访问应用中以 /druid 开头的任何 URL,均可进入 Druid 提供的数据库连接池统计信息界面。例如,可通过http://yourdomain.com/druid或类似地址查看监控数据。此设置便于控制和访问 Druid 的监控功能,同时与应用其他部分的路径区分开来。
- druid.stat-view-servlet.login-username=admin:监控界面的登录用户名。
- druid.stat-view-servlet.login-password=pwd:监控界面的登录密码。
- druid.stat-view-servlet.allow=127.0.0.1,192.168.1.0/24:该配置项用于指定允许访问 Druid 监控界面的 IP 地址或 IP 地址段。通过设置该参数,可限制只有列表中的 IP 地址才能访问 Druid 提供的数据库连接池统计信息,增强安全性。若未设置或为空,理论上默认允许所有 IP 访问(具体行为可能因 Druid 的默认安全策略而异)。正确的设置方式是填写具体的 IP 或 IP 范围,如 druid.stat-view-servlet.allow=192.168.1.0/24,10.0.0.5,这样只有来自这些 IP 的请求才能成功访问监控页面。
- druid.stat-view-servlet.deny=0.0.0.0/0:表示拒绝所有 IP 地址访问 Druid 的监控界面。其中 0.0.0.0/0 是一个通配符,代表所有 IPv4 地址。设置此配置后,任何来源的 IP 地址都无法通过网络访问 Druid 提供的数据库连接池统计信息页面,这是一种非常严格的访问控制策略,通常用于彻底关闭公网或不希望任何外部访问的环境中的监控接口。需注意,若同时配置了 allow 和 deny,通常 deny 规则优先执行。
- druid.stat-view-servlet.reset-enable=false:该配置项表示禁用 Druid 监控界面中的 “Reset All” 功能。默认情况下,该功能通常是启用的,允许用户通过 Web 界面手动重置所有的统计信息。但当将 reset-enable 设置为 false 时,监控界面将不再显示重置按钮,从而有效防止因误操作导致宝贵的监控数据被清空,这对于需要保留历史统计信息以便分析的场景尤为重要。
根据业务实际情况合理配置 Druid 数据库连接池参数,能够显著提升应用的数据库访问性能和稳定性。开发者应依据实际业务需求和系统资源状况,对上述参数进行细致调整,以实现最佳效果。