SpringBoot 整合 Druid 数据库连接池

描述

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

项目地址: Druid

官方文档

有需要的,可以上去仔细的去研究一下这个项目。

打开监控功能

Druid内置提供一个StatFilter,用于统计监控信息

别名配置:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  	<property name="filters" value="stat" />
  </bean>

yml配置开启:

 stat-view-servlet:
        enabled: true
      filter:
        stat:
          enabled: true
      web-stat-filter:
        enabled: true

配置防SQL攻击

提供了 wallfilter 来做 sql:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      ...
      <property name="filters" value="wall"/>
  </bean>

yml配置:

filters: wall

程序防止泄露问题

当程序存在缺陷时,申请的连接忘记关闭,这时候,就存在连接泄漏了。Druid提供了RemoveAbandanded相关配置,用来关闭长时间不使用的连接。RemoveAbandanded功能不建议在生产环境中使用,仅用于连接泄露检测诊断

配置:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
  	<property name="removeAbandoned" value="true" /> <!-- 打开removeAbandoned功能 -->
  	<property name="removeAbandonedTimeout" value="1800" /> <!-- 1800秒,也就是30分钟 -->
  	<property name="logAbandoned" value="true" /> <!-- 关闭abanded连接时输出错误日志 -->
  </bean>

配置removeAbandoned对性能会有一些影响,建议怀疑存在泄漏之后再打开。在上面的配置中,如果连接超过30分钟未关闭,就会被强行回收,并且日志记录连接申请时的调用堆栈

yml配置:

  remove-abandoned: true
  remove-abandoned-timeout: 1800
  log-abandoned: true

配置成功后 在数据源中可以看到堆栈信息: http://localhost:8080/druid/datasource.html

Druid中使用PSCache会有内存占用过大问题?

Oracle数据库下PreparedStatementCache内存问题解决方案

如果有使用 Oracle的可以仔细看看,PreparedStatementCache带来的问题,以及Druid 是如何解决的。

数据库连接池对比

DruidBoneCPDBCPC3P0ProxoolJBossTomcat-Jdbc
LRU?
PSCache
PSCache-Oracle-Optimized
ExceptionSorter
更新维护?

从官方给出的图来看,Druid 是所有都支持的,并且也是更新最快的。没一个月发布一个窗口。

整合

pom.xml

<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.2.6</version>
		</dependency>

yml 配置:

    druid:
      initial-size: 1
      min-idle: 10
      max-active: 20
      max-wait: 6000
      time-between-eviction-runs-millis: 2000
      min-evictable-idle-time-millis: 600000
      max-evictable-idle-time-millis: 900000
      remove-abandoned: true
      remove-abandoned-timeout: 1800
      log-abandoned: true
      stat-view-servlet:
        enabled: true
      filter:
        stat:
          enabled: true
      web-stat-filter:
        enabled: true
      filters: wall

启动项目访问: http://localhost:8080/druid/
在这里插入图片描述

出现以下页面,说明访问成功了。接下来就可以看到Druid 为我们提供了监控页面。接下来我们就可以在项目中

获取 Druid 的监控数据

 @GetMapping("/stat")
    public Object druidStat(){
        //该方法可以获取所有数据源的监控数据,除此之外 DruidStatManagerFacade 还提供了一些其他方法,你可以按需选择使用。
        return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
    }

使用api获取监控的数据。

spring-boot-integrate 然后后续会集成更多的模块进去,需要请点个star。后续会集成更多的接口实现,有需要的请保存。 如果这篇文章,有帮助到大家的,请给作者一个一键三连,谢谢

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值