4. 数据库连接池Druid
Druid 是alibaba开源数据库连接池。
开源地址 https://github.com/alibaba/druid
1. 添加依赖
在pom.xml中添加依赖:
druid-spring-boot-starter
2. 数据源配置:
在 application.properties 中配置Druid:
#=======Druid数据源配置
#数据源类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#数据库连接驱动 账号 密码 url
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/base_admin?
useUnicode=true&characterEncoding=UTF-
8&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
#== Druid连接池配置
#初始化连接池大小
spring.datasource.druid.initial-size=10
#最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请
spring.datasource.druid.min-idle=1
#最大活跃数
spring.datasource.druid.max-active=50
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制
spring.datasource.druid.max-wait=60000
#失效检查线程运行时间间隔,要小于MySQL默认
spring.datasource.druid.time-between-eviction-runs-millis=60000
#连接的超时时间,默认为半小时
spring.datasource.druid.min-evictable-idle-time-millis=300000
#检查连接有效性的SQL语句
spring.datasource.druid.validation-query=SELECt 1 FROM dual
#检查连接是否有效
spring.datasource.druid.test-while-idle=true
#当应用向连接池申请连接时,连接池会判断这条连接是否是可用的。
spring.datasource.druid.test-on-borrow=true
#当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用。
spring.datasource.druid.test-on-return=true
#开启池的prepared statement 池功能 是否池化statements.
spring.datasource.druid.pool-prepared-statements=false
#statement池能够同时分配的打开的statements的最大数量
spring.datasource.druid.max-open-prepared-statements=50
#==开启StatFilter 用于统计监控信息
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=1000
#==开启WallFilter WallFilter的功能是防御SQL注入攻击。它是基于SQL语法分析,理解其中的SQL语
义,然后做处理的,智能,准确,误报率低。
spring.datasource.druid.filter.wall.enabled=true
#对被认为是攻击的SQL进行LOG.error输出 开启
spring.datasource.druid.filter.wall.log-violation=true
#对被认为是攻击的SQL抛出SQLException 关闭
spring.datasource.druid.filter.wall.throw-exception=false
#检查DELETE语句是否无where条件,这是有风险的,但不是SQL注入类型的风险
spring.datasource.druid.filter.wall.config.delete-where-none-check=true
#==开启Web监控
spring.datasource.druid.web-stat-filter.enabled=true
#排除一些不必要的url,比如.js,/jslib/等等
spring.datasource.druid.web-stat-
filter.exclusions=/druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico
spring.datasource.druid.web-stat-filter.url-pattern=/*
#===开启监控页面
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
这里如果使用YAML 写会简单一些
- 启动运行测试类
注意在没有引入依赖前,数据库连接池默认是HikariPool
4. 查看监控
启动web应用,查看druid监控界面
http://localhost:8080/druid/login.html
5. 数据库事务
5.1. @Transactional
service中使用注解,其实controller中也可以使用,一般写在service中
@Transactional 注解在类上或者方法上
5.2. 事务失效情况
@Transactional 应用在非 public 修饰的方法上
@Transactional 注解属性 propagation 设置错误(事务传播属性设置错误)
@Transactional 注解属性 rollbackFor 设置错误
同一个类中方法调用,导致@Transactional失效
异常被你catch捕获了
数据库(或数据库引擎)不支持事务
新开启一个线程



