【SpringBoot 2学习笔记】《九》SpringBoot2数据库访问之Druid连接池

为什么要使用数据库连接池

不使用数据库连接池: 对于并发量大的网站,会导致以下问题:

  • 每一次web请求都要建立一次数据库连接,在同样的步骤下重复占用系统资源
  • 不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,连接过多情况下可能导致内存泄漏,服务器崩溃。

使用数据库连接池:

  • 提高性能,将已经创建好的连接保存在连接池中,当有请求来时,直接从连接池中使用已经创建好的连接进行数据库服务器的访问。省略了创建连接和销毁连接的过程,TCP连接建立时的三次握手和销毁时的四次握手。
  • 嚣张的Druid(GitHub的Wiki上自称是Java语言最好的数据库连接池)。Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。经过阿里内部数千上万的系统大规模验证,经过历年双十一超大规模并发验证。

9.1 配置项目POM文件

加入Druid的依赖

	<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
	<dependency>
	    <groupId>com.alibaba</groupId>
	    <artifactId>druid-spring-boot-starter</artifactId>
	    <version>1.1.21</version>
	</dependency>

9.2 配置数据库连接池application.properties

Druid必须的配置其实很少,只需配置一行,表明不使用默认的Hikari。参数调优部分是可选的,这里列出的参数都是druid官网推荐的典型配置。

# druid配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# druid参数调优(可选)
# 初始化大小,最小,最大
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
# 配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
# 测试连接
spring.datasource.druid.validation-query=select 'x'
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 配置监控统计拦截的filters
spring.datasource.druid.filters=stat
# asyncInit是1.1.4中新增加的配置,如果有initialSize数量较多时,打开会加快应用启动时间
spring.datasource.druid.async-init=true


9.3 开启Druid监控配置

Druid的监控配置可以通过在配置文件中通过配置方式,也可以通过创建配置类(DruidConfiguration)的方式,下面的例子是使用配置文件方式。

# 进行Druid的监控配置
# Druid内置提供一个StatFilter,用于统计监控信息(https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter)
# 启用StatFilter
spring.datasource.druid.web-stat-filter.enabled=true
# StatFilter过滤匹配
spring.datasource.druid.web-stat-filter.url-pattern=/* 
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
# 缺省sessionStatMaxCount是1000个。你可以按需要进行配置
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000 
# 关闭session统计功能
spring.datasource.druid.web-stat-filter.session-stat-enable=true 
# 配置profileEnable能够监控单个url调用的sql列表
spring.datasource.druid.web-stat-filter.profile-enable=true 


# StatViewServlet配置,内置监控页面配置
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 禁用HTML页面上的“Reset All”功能
spring.datasource.druid.stat-view-servlet.reset-enable=true
# 监控页面用户名和密码
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
# IP白名单 (没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# IP黑名单 (存在共同时,deny优先于allow)
spring.datasource.druid.stat-view-servlet.deny=192.168.10.1


## Spring监控配置
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
spring.datasource.druid.aop-patterns=com.gavinbj.confmng.service.*
# 配置wall filter,详细参考:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter
spring.datasource.druid.filter.wall.enabled=true
# 数据库指定为MySQL
spring.datasource.druid.filter.wall.db-type=mysql
# 是否允许执行Alter Table语句
spring.datasource.druid.filter.wall.config.alter-table-allow=false
# truncate语句是危险,缺省打开,若需要自行关闭
spring.datasource.druid.filter.wall.config.truncate-allow=false
# 是否循序执行删除表语句
spring.datasource.druid.filter.wall.config.drop-table-allow=false
# 是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽DDL
spring.datasource.druid.filter.wall.config.none-base-statement-allow=false
# 检查UPDATE语句的WHERE子句是否是一个永真条件
spring.datasource.druid.filter.wall.config.update-where-none-check=true
# 是否允许调用Connection.getMetadata方法,这个方法调用会暴露数据库的表信息
spring.datasource.druid.filter.wall.config.metadata-allow=true
# 对被认为是攻击的SQL进行LOG.error输出
spring.datasource.druid.filter.wall.log-violation=true
# 对被认为是攻击的SQL抛出SQLExcepton
spring.datasource.druid.filter.wall.throw-exception=true

9.4 整合结果确认

通过如上配置,即完成了Druid的整合,同时开启了Druid的监控中心。我们接下来验证一下:

启动工程,访问:http://localhost:9002/gavin/api/user/users/gavin

返回结果:

{
	"status": 0,
	"code": 1003,
	"msg": "处理成功!",
	"data": {
		"userId": "gavin",
		"userName": "盖文",
		"introduce": "大学教授",
		"mobilephone": "13940981276",
		"email": "[email protected]",
		"birthday": "2019-10-07T00:00:00.000+0000",
		"gender": "男"
	}
}

打开Druid的监控页面:http://localhost:9002/gavin/druid/login.html

注意:账号:admin , 密码:admin 账号密码可以在application.properties 中修改。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

发布了24 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/gavinbj/article/details/104090892