spring 数据库 链接db2_Druid,Java语言中最好的数据库连接池

本文介绍了Druid数据库连接池的优势,包括其在Java中的地位、与SpringBoot的无缝集成、防止SQL注入的功能、数据库账号密码加密、慢SQL日志及监控功能,并详细阐述了Druid在SpringBoot应用中的配置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        Druid是Java语言中最好的数据库连接池,这话不是我说的,是Druid官方文档自己这样描述的,这是何等的自信!

        连接池的作用,跟线程池的作用大同小异,都是为了减少频繁的创建销毁连接IO,提升性能。druid 作为阿里旗下的一个开源产品,经过阿里千万级别的压测跟测试,对于绝大部分的公司来说都是可以满足的。而且这个连接池跟其他连接池对比,也是一枝独秀。

2f2d464f6ca408ad70f07935916e24a4.png

选择druid作为首选连接池的原因:

1、理论上说,支持所有有jdbc驱动的数据库。实际测试过的有

数据库支持状态
mysql支持,大规模使用
oracle支持,大规模使用
sqlserver支持
postgres支持
db2支持
h2支持
derby支持
sqlite支持

2、跟springboot 完美整合,从最简单的功能上看,只需要添加一个starter依赖即可使用

    <dependency>      <groupId>com.alibabagroupId>      <artifactId>druid-spring-boot-starterartifactId>      <version>1.2.1version>    dependency>

3、防止SQL注入Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的

4、数据库的账号密码加密,提供ConfigFilter可以进行配置

  • 从配置文件中读取配置

  • 从远程http文件中读取配置

  • 为数据库密码提供加密功能

5、慢SQL日志输出,配置慢SQL的标准 StatFilter(Springboot例子)

spring:  datasource:    druid:      filter: "stat" # 内置的过滤器链,默认为null,类型是:new CopyOnWriteArrayList();内置的有      connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

6、强大的监控功能  StatFilter(Springboot例子)

    6.1 只需要添加配置即可

spring:  datasource:    druid:      filter: "stat" # 内置的过滤器链,默认为null,类型是:new CopyOnWriteArrayList();内置的有      ## 开启页面      stat-view-servlet:        enabled: true        url-pattern: /druid/*        login-password: gaoqijin        login-username: gaoqijin

7、多数据源的配置(Springboot例子)

7.1 添加配置application.properties
spring.datasource.url=spring.datasource.username=spring.datasource.password=# Druid 数据源配置,继承spring.datasource.* 配置,相同则覆盖...spring.datasource.druid.initial-size=5spring.datasource.druid.max-active=5...# Druid 数据源 1 配置,继承spring.datasource.druid.* 配置,相同则覆盖...spring.datasource.druid.one.max-active=10spring.datasource.druid.one.max-wait=10000...# Druid 数据源 2 配置,继承spring.datasource.druid.* 配置,相同则覆盖...spring.datasource.druid.two.max-active=20spring.datasource.druid.two.max-wait=20000...
7.2 添加配置数据源config
@Primary@Bean@ConfigurationProperties("spring.datasource.druid.one")public DataSource dataSourceOne(){    return DruidDataSourceBuilder.create().build();}@Bean@ConfigurationProperties("spring.datasource.druid.two")public DataSource dataSourceTwo(){    return DruidDataSourceBuilder.create().build();}

....

....

解读Druid 会发现,Druid很多扩展功能都是通过过滤器链完成的,内置的过滤器链跟别名如下:

比如:StatFilter 别名为:stat

Log4jFilter 别名为:log4j

druid.filters.default=com.alibaba.druid.filter.stat.StatFilterdruid.filters.stat=com.alibaba.druid.filter.stat.StatFilterdruid.filters.mergeStat=com.alibaba.druid.filter.stat.MergeStatFilterdruid.filters.counter=com.alibaba.druid.filter.stat.StatFilterdruid.filters.encoding=com.alibaba.druid.filter.encoding.EncodingConvertFilterdruid.filters.log4j=com.alibaba.druid.filter.logging.Log4jFilterdruid.filters.log4j2=com.alibaba.druid.filter.logging.Log4j2Filterdruid.filters.slf4j=com.alibaba.druid.filter.logging.Slf4jLogFilterdruid.filters.commonlogging=com.alibaba.druid.filter.logging.CommonsLogFilterdruid.filters.commonLogging=com.alibaba.druid.filter.logging.CommonsLogFilterdruid.filters.wall=com.alibaba.druid.wall.WallFilterdruid.filters.config=com.alibaba.druid.filter.config.ConfigFilterdruid.filters.haRandomValidator=com.alibaba.druid.pool.ha.selector.RandomDataSourceValidateFilter

Springboot 开发使用druid,配置详解:

spring:  datasource:    druid:      ## 连接池的配置      initial-size: 5 # 连接池 初始化大小,默认值为 0      min-idle: 10 # 连接池最小空闲数,默认值为 0      max-active: 20 # 连接池最大连接数,默认值为 8      max-wait: 1000 # 连接等待数,默认是-1,无限等待,单位是毫秒      pool-prepared-statements: false # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。      max-open-prepared-statements: -1 #最大缓存PSCache的数量,默认值为-1;当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100      validation-query: "select 1" # 心跳检测的sql语句,默认是null,即不启动心跳检测      validation-query-timeout: 10 # 心跳检测的频率,默认是-1,即不启动心跳检测      test-on-borrow: false # 与数据库建立连接的时间,是否发起心跳检测,影响性能;主要作用:防止取到的连接不可用;默认值是false      test-on-return: false # 当空闲连接关闭前,是否发起心跳检测,影响性能;默认值是false      test-while-idle: true # 是否在空闲的时候,发起心跳检测,建议开启,不影响性能#      time-between-eviction-runs-millis: 60000 #  配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒#      min-evictable-idle-time-millis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒,默认是:1000L * 60L * 30L#      max-evictable-idle-time-millis: 6000000  # 配置一个连接在池中最大生存的时间,单位是毫秒,默认是:1000L * 60L * 30L      keep-alive: true # 是否保存长连接,1.1.16 ,推荐为true,默认值为false      ## 配置监控统计拦截的filters      filter: "stat" # 内置的过滤器链,默认为null,类型是:new CopyOnWriteArrayList();内置的有

启动成功的标识:

987213443eacdf40319e15ef3296fbb7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值