史上最简单Spring Boot教程:第五篇SpringBoot之druid数据库连接池配置
一、什么是Druid
Druid是Java语言中最好的数据库连接池,它能够提供强大的监控和扩展功能。
Druid是一个JDBC组件,它包括三部分:
1)DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。
2)DruidDataSource 高效可管理的数据库连接池。
3)SQLParser
二、 为什么要使用数据库连接池
使用数据库连接池主要考虑到程序与数据库建立连接的性能。创建一个新的数据库是一个很耗时的过程,在使用完之后,可能还需要不断的释放建立的连接,对资源的损耗大。
而采用数据库连接池之后,首先就创建了固定数量的数据库连接,需要用的时候使用即可。当然,这样做的一个缺点是,可能某些时候完全没有数据库请求,但是也保持了数据库的最小连接数。浪费了资源。不过这种浪费资源相对于完全不采用数据库连接池还是很有优势的。
三、Druid有哪些优势
1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
2) 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
项目地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
Druid的详细源码可以从 https://github.com/alibaba/druid进行下载。
四、使用Druid及其应用
1、新建项目
注:这里说明一点,创建项目勾选的mysql驱动版本可能过高,当年启动项目时会出现以下错误
必须配置8以上的jdbc驱动,说明jdbc驱动过高
我们这里统一使用5.1.44版本
2、导入pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
3、配置application.yml,添加数据库连接池信息
①application.yml和application.properties区别?
yml文件的好处,天然的树状结构,一目了然,实质上跟properties是差不多的。
注意修改数据库名(mybatis_ssm),登录账号(username)以及登录密码(password)
server: servlet: context-path: /springboot
-
spring:
-
datasource:
-
#
1.
JDBC
-
type: com.alibaba.druid.pool.
DruidDataSource
-
driver-
class-name: com.mysql.jdbc.Driver
-
url: jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=utf8
-
username: root
-
password: 123456
-
druid:
-
#2.连接池配置
-
#初始化连接池的连接数量 大小,最小,最大
-
initial-size: 5
-
min-idle: 5
-
max-active: 20
-
#配置获取连接等待超时的时间.
-
max-wait: 60000
-
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
-
time-between-eviction-runs-millis: 60000
-
# 配置一个连接在池中最小生存的时间,单位是毫秒
-
min-evictable-idle-time-millis: 30000
-
validation-query: SELECT 1 FROM DUAL
-
test-while-idle: true
-
test-on-borrow: true
-
test-on-return: false
-
# 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭 个人建议如果想用SQL防火墙 建议打开
-
pool-prepared-statements: true
-
max-pool-prepared-statement-per-connection-size: 20
-
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
-
filter:
-
stat:
-
merge-sql: true
-
slow-sql-millis: 5000
-
#3.基础监控配置
-
web-stat-filter:
-
enabled: true
-
url-pattern: /*
-
#设置不统计哪些URL
-
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
-
session-stat-enable: true
-
session-stat-max-count: 100
-
stat-view-servlet:
-
enabled: true
-
url-pattern: /druid/*
-
reset-enable: true
-
#设置监控页面的登录名和密码
-
login-username: admin
-
login-password: admin
-
allow: 127.0.0.1
-
#deny: 192.168.1.100
-
五、启动SpringBoot项目访问druid监控页面
http://localhost:tomcat端口号/项目名称/druid/
项目访问:http://localhost:8080/springboot/druid/login.html
登录账号密码就是application.yml配置文件设置监控页面的登录名(admin)和密码(admin)
登录成功后加入Druid首页面
数据源里面的数据就是我们刚刚在application.yml中所配置的数据
六、总结
在实际项目中,数据库连接池的使用是必不可少的。没有采用数据库连接池时,系统是按照数据库默认的方式保持一定的连接数,将一定的连接数保持在休眠状态。采用druid数据库连接池后,正常保持多少连接数,最大保持多少连接数都是可配置的。也有一台完整的平台监控整个数据库。