博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 数据库连接池 Druid
阅读量:6704 次
发布时间:2019-06-25

本文共 4132 字,大约阅读时间需要 13 分钟。

简介

数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

Druid:/ˈdruːɪd a priest of an ancient Celtic religion 德鲁伊特(古代凯尔特人的祭司)

介绍挺全面的,有中文教程,总结也挺全。

Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为

Druid 实用的功能:

  • 详细的监控
  • ExceptionSorter,针对主流数据库的返回码都有支持
  • SQL 防注入
  • 内置加密配置
  • 众多扩展点,方便定制

配置

怎么配置数据库连接池?

你可以在程序中直接调用DruidDataSource,也可以使用Spring配置,或者使用JNDI配置。

配置 Druid 连接池方式主要有两种:

  • 引入第三方druid包,这种在配置时需要手动配置 DruidDataSource类 和监控
  • 引入 druid-spring-boot-starter 包, 修改对应环境配置文件即可,本文采用的这种方式,Github 上有次对应的指导:

POM-添加 Druid 依赖

com.alibaba
druid-spring-boot-starter
1.1.13

添加 Druid 配置

filters: stat,wall,log4j

  • stat:Druid 内置提供一个 StatFilter ,用于统计监控信息。如果需要配置访问页面可以参考:;
  • wall:Druid 防御 SQL 注入攻击的 WallFilter 就是通过 Druid 的 SQL Parser 分析。Druid 提供的 SQL Parser 可以在 JDBC 层拦截 SQL 做相应处理,比如说分库分表、审计等。对应了监控页面的 「防火墙」页面;
  • log4j:这个就是日志记录的功能,可以把 sql 语句打印到 log4j 供排查问题。
  • config: 提供了密码加解密的功能

修改对应环境的配置文件,添加 druid 的支持

mybatis.type-aliases-package==com.michael.mybatisdemospring.datasource.url=jdbc:mysql://192.168.3.43:3306/beta?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=truespring.datasource.username=cicdspring.datasource.password=Home123*spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverserver.port=8089swagger.enable=true# druid连接池配置spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver# 初始化大小,最小,最大spring.datasource.druid.initial-size=5spring.datasource.druid.max-active=100spring.datasource.druid.min-idle=5# 连接超时配置spring.datasource.druid.max-wait=60000spring.datasource.druid.pool-prepared-statements=truespring.datasource.druid.max-pool-prepared-statement-per-connection-size=20spring.datasource.druid.validation-query=SELECT 1 FROM DUALspring.datasource.druid.validation-query-timeout=60000spring.datasource.druid.test-on-borrow=falsespring.datasource.druid.test-on-return=falsespring.datasource.druid.test-while-idle=true# 多久进行检测一次空闲的连接,单位毫秒spring.datasource.druid.time-between-eviction-runs-millis=60000# 连接最小生存时间spring.datasource.druid.min-evictable-idle-time-millis=100000# druid配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙spring.datasource.druid.filters=config,wall,stat# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilterspring.datasource.druid.web-stat-filter.enabled=truespring.datasource.druid.web-stat-filter.url-pattern=/*spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置spring.datasource.druid.stat-view-servlet.enabled=truespring.datasource.druid.stat-view-servlet.url-pattern=/druid/*spring.datasource.druid.stat-view-servlet.reset-enable=falsespring.datasource.druid.stat-view-servlet.login-username=adminspring.datasource.druid.stat-view-servlet.login-password=admin123spring.datasource.druid.stat-view-servlet.allow=127.0.0.1spring.datasource.druid.stat-view-servlet.deny=192.168.32.139# druid配置 Filter# 配置StatFilterspring.datasource.druid.filter.stat.db-type=mysqlspring.datasource.druid.filter.stat.log-slow-sql=true# 配置监控拦截,慢sql,10秒,并且通过日志输出执行慢的SQLspring.datasource.druid.filter.stat.slow-sql-millis=5000# 配置WallFilterspring.datasource.druid.filter.wall.enabled=truespring.datasource.druid.filter.wall.db-type=mysqlspring.datasource.druid.filter.wall.config.delete-allow=falsespring.datasource.druid.filter.wall.config.drop-table-allow=false

查看

127.0.0.1:8080/druid/login.html, 进入 druid 登陆界面,如下图,输入在配置类 DruidConfiguration 中配置的用户名和密码,进入监控界面

我们已经成功的访问到了监控首页,可以看到大致包含了如下几个模块:数据源、SQL监控、SQL防火墙、Web应用、URI监控、Session监控、JSONAPI等。

数据源

可以看到项目中管理的所有数据源配置的详细情况,除了密码没有显示外其他都在。

SQL监控

可以查看所有的执行sql语句

SQL防火墙

druid提供了黑白名单的访问,可以清楚的看到sql防护情况。

Web应用

可以看到目前运行的web程序的详细信息。

URI监控

可以监控到所有的请求路径的请求次数、请求时间等其他参数。

Session监控

可以看到当前的session状况,创建时间、最后活跃时间、请求次数、请求时间等详细参数。

JSONAPI

通过api的形式访问Druid的监控接口,api接口返回Json形式数据。

其他

006tNc79ly1g2778mdjalj316h0po47c.jpg

006tNc79ly1g277amo7d3j313s0lndx7.jpg

本文参考示例

参考

  • 简要介绍了主流的数据库连接池

转载于:https://www.cnblogs.com/michael-xiang/p/10708387.html

你可能感兴趣的文章
spring-控制反转IoC
查看>>
spring cloud微服务分布式云架构(三)-服务消费者(Feign)
查看>>
区块链软件公司:区块链的金融化体系
查看>>
常用的几个设计心理学
查看>>
微服务为什么一定要用docker
查看>>
U盘空间缩减还原
查看>>
nagios监控window主机和LInux主机网卡流量
查看>>
Linux内核将用Nftables替代iptables
查看>>
css 字体属性详细总结
查看>>
Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
SQL Server --堆表和索引表的区别
查看>>
程序相关规范_已整理
查看>>
我对创业和管理的一些看法
查看>>
linux chattr -- 修改linux文件属性
查看>>
我的友情链接
查看>>
Edit Control 上行号
查看>>
20110717 搞不懂的思科物流
查看>>
将图片和文字写到pdf文件中
查看>>