示例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.datasource.url: 数据库URL。这个应该不用过多解释了,我们在链接数据库的时候都会指定我们连接的URL,这个相当于是比较常见的配置了。
druid.datasource.username: 数据库用户名。
druid.datasource.password: 数据库密码。
druid.datasource.driverClassName: 数据库驱动类名。
druid.initialSize: 初始连接池大小。当应用启动时,Druid连接池会根据initialSize设定的值预先创建相应数量的数据库物理连接。这样做可以确保在应用初次需要数据库连接时,能够快速提供已准备好的连接,从而提高响应速度和系统性能,避免了在请求到来时才创建连接的延迟。
druid.minIdle: 最小连接池大小。Druid连接池会定期检查当前连接池中的空闲连接数量,如果空闲连接数低于minIdle设置的值,连接池会自动创建新的连接,以保证即使在低负载期间也有足够的空闲连接可供快速复用,这样可以在遇到突发流量时,减少因创建新连接而导致的延迟,从而提升系统的响应速度和稳定性。
druid.maxActive: 最大连接池大小。maxActive是连接池配置中的一个关键参数,它定义了连接池中允许同时存在的最大活动连接数。活动连接指的是当前正在被应用程序使用的,与数据库建立的连接。如果达到这个上限,后续的连接请求将会被阻塞或拒绝,直到有活动连接被释放回到连接池中。例如,如果maxActive设置为100,意味着连接池最多能同时处理100个数据库操作请求。如果应用程序尝试打开的连接数超过了这个限制,根据连接池的具体实现和配置,可能的行为包括:等待直到有连接释放(如果设置了最大等待时间),抛出异常,或者从备用数据源寻求连接等。
druid.maxWait: 等待连接的最大毫秒数,超时抛出异常。maxWait参数是数据库连接池配置中的一个重要设定,用于控制应用程序在请求数据库连接但连接池已满时的最大等待时间。这一时间限制了应用程序在等待新连接分配之前能够阻塞多久,超时后,连接池会根据配置采取相应行动,如抛出异常或执行回退策略。正确配置maxWait有助于平衡系统响应速度与资源利用率,确保服务稳定性和用户体验。单位通常是毫秒。
druid.timeBetweenEvictionRunsMillis: 连接空闲多久后检查其有效性。是数据库连接池配置中的一个参数,它定义了连接池执行连接检测和清理的周期间隔时间,单位是毫秒。具体来说,连接池会每隔这个指定的时间段检查一次池中的连接,根据配置的测试条件(如验证查询SQL)来判断连接是否仍然有效、空闲时间是否过长或者其它自定义的检查条件。无效或不再需要的连接会被关闭并从连接池中移除,从而确保连接池中维护的是健康、可用的数据库连接。此参数对于维护连接池的高效运作和数据库连接的稳定性至关重要,通过及时回收问题连接,可以避免因使用不良连接导致的数据库操作失败,提升系统整体的健壮性和性能。合理的设置需考虑检测频率对性能的影响,避免过于频繁导致不必要的资源消耗。
druid.minEvictableIdleTimeMillis: 连接在池中最小生存时间。是数据库连接池配置中的一个参数,用于设定连接在池中空闲的最短时间,超过这个时间的空闲连接在下次连接回收检查时将会被移除。单位是毫秒。这意味着,即使连接是健康的,但如果它空闲时间超过了minEvictableIdleTimeMillis设置的值,连接池也会将其关闭并从池中移除,以此来避免资源的浪费并保持连接池的“新鲜度”。此参数配合timeBetweenEvictionRunsMillis使用,共同控制连接池中连接的生命周期管理,确保不会有过多不必要的连接长期占用资源。通过合理设置,可以有效利用系统资源,提高数据库访问效率,同时避免因连接闲置太久而可能导致的问题。
druid.testWhileIdle: 是否在空闲时验证连接。如果设置为true,则连接池会在每次检查(按照timeBetweenEvictionRunsMillis设定的周期)空闲连接时,执行验证查询或其他检查手段来确认这些连接是否依然有效。如果连接被判定为失效,则会将其从连接池中移除,以防止应用程序使用到不可用的数据库连接。启用testWhileIdle可以提高应用的稳定性,因为它有助于提前发现并移除那些因为网络波动、数据库重启等原因而变得不可用的连接,从而避免在真正执行数据库操作时遇到问题。但是,这也意味着会增加一定的性能开销,因为每个检查周期都会有一定的资源用于测试连接的有效性。因此,如何设置该参数需要权衡维护连接健康性和系统资源消耗之间的关系。
druid.testOnBorrow: 获取连接时是否测试连接。决定在从连接池中借取(borrow)一个连接给应用程序使用之前,是否需要先进行连接有效性测试。如果设置为true,每当应用程序请求一个连接时,连接池会先执行一次连接测试,如执行一个简单的SQL查询或预定义的验证语句,确保即将返回的连接是可用的。只有通过测试的连接才会被分配给应用使用。启用testOnBorrow可以有效防止因提供给应用的连接已经损坏而导致的运行时错误,提高了应用程序的健壮性。然而,这也增加了每次获取连接时的额外延迟,因为需要执行验证操作,可能对性能产生一定影响,尤其是在高并发场景下。
druid.testOnReturn: 归还连接时是否测试连接。用于指定当一个数据库连接被应用程序使用完毕并返回给连接池时,是否应该对其进行一次连接有效性的检查。如果设置为true,每当一个连接被归还到连接池,连接池就会执行一次验证来确定该连接的健康状况。这个参数的主要作用是确保有问题的连接不会被错误地放回池中,再次被分配出去导致应用层的数据库操作失败。通过这种方式,可以及时发现并处理那些在使用过程中可能已经变得不稳定的连接,维护连接池的整体健康状态。然而,需要注意的是,执行这个测试同样会带来一定的性能开销,尤其是在连接频繁获取和释放的场景下。因此,是否启用testOnReturn应当根据实际应用场景的需求和性能考量来决定,特别是在对数据库连接的即时可靠性有严格要求的系统中,可能更为适用。
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变体。这个配置有助于优化统计分析的效率和易读性。
druid.wall.filter.config.file: WallFilter的配置文件路径。是Druid连接池中关于SQL防火墙(Wall Filter)的一个配置项,用于指定SQL防火墙配置文件的位置。这个配置允许用户自定义SQL防火墙的行为,通过外部XML或 properties 文件来详细设定哪些SQL操作应该被允许或禁止,比如是否允许删除操作、修改表结构等,以增强数据库的安全防护。当设置了这个参数后,Druid的Wall Filter会在初始化时加载指定文件中的配置规则,用以执行更细致的SQL安全策略检查,比如阻止潜在的SQL注入攻击、限制危险的SQL操作等。通过外部配置文件,管理员可以灵活地调整安全策略,而不必直接修改代码或连接池的基本配置,提高了系统的可维护性和安全性。
druid.logAbandoned: 是否记录被遗弃的连接。是Druid数据库连接池的一个配置属性,用于控制是否记录被遗弃(abandoned)的连接信息。当设置为true时,如果应用程序没有正确关闭数据库连接,导致连接在超时后被连接池回收,Druid将会把这些未正常关闭的连接信息记录到日志中。这有助于开发者发现并修复程序中未关闭连接的资源泄露问题,从而避免潜在的连接池耗尽风险和性能下降。通过启用此配置,可以增强对连接使用情况的监控和问题排查能力。
druid.removeAbandoned: 是否自动回收超时连接。用于指示是否自动移除被应用程序遗弃的数据库连接。当设置为true,Druid连接池会定期检查是否有超时且未被正确关闭的连接(即被应用程序打开后未关闭的连接),并将这些遗弃的连接从连接池中移除。这一机制可以防止因程序疏忽未关闭连接而导致的连接泄漏,进而避免连接池资源耗尽的问题,保障数据库访问的稳定性和系统整体性能。正确配置该参数可以帮助管理数据库资源,确保其有效利用。
druid.removeAbandonedTimeout: 超时时间,单位秒。用于设置识别和移除遗弃连接的超时时间阈值(单位通常是秒)。当druid.removeAbandoned设置为true时,Druid会监控连接的使用情况,如果某个连接被 Checkout(从连接池取出)后,空闲时间超过了druid.removeAbandonedTimeout指定的时长,且这个连接没有被归还到连接池,Druid就会认为这个连接被遗弃,并依据此配置自动移除它。这个设置有助于及时回收不再使用的连接资源,防止资源泄露,保证连接池的高效运行和系统的稳定性。
druid.stat-view-servlet.enabled=true:这一配置表示启用了Druid连接池的监控Servlet功能。这意味着你可以通过Web界面来查看Druid提供的数据库连接池统计信息,包括活跃连接数、线程池状态、SQL执行情况等,这对于监控和诊断应用的数据库访问性能非常有帮助。设置true后,你需要根据其他相关配置(如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 15 16:配置项用于指定允许访问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 18 :意味着拒绝所有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 数据库连接池参数可以显著提升应用的数据库访问性能和稳定性。开发者应根据实际业务需求和系统资源情况,对上述参数进行细致调整,以达到最佳效果。