一. 回顾
前面学习了Day55——SpringBoot2.x版本的jdbc&自动配置原理,今天来学习整合Druid以及配置数据源监控。
二. 遇到的问题
情况:笔者使用的SpringBoot2.3版本,按照b站的雷神视频搭建工程,但是搭建好后,运行确实没有报错,但是druid的后台页面某些专栏是什么都没有的,而雷神搭好后运行是有的,如下:
为了解决这个问题,调整了很多参数以及配置,还有切换依赖的版本,都没有办法解决。
因此笔者使用另一个依赖druid-spring-boot-starter
来整合Druid。详细步骤往下看
三. 整合Druid&配置数据源监控
首先给出druid-spring-boot-starter
的官方文档地址
鉴于文章篇幅要求,这里只给出最最最最关键的代码以及核心步骤,后面会给出详细配置代码。
3.1 引入依赖
首先引入依赖,如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
网上有的人说高版本druid-starter与MySQL驱动版本不匹配,导致访问不了druid后台页面,需要改成1.1.10。大家酌情参考修改版本,如果修改后仍无法访问,那么就不是版本问题了。
3.2 配置Druid
配置Druid,如下:
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://192.168.32.103:3306/jdbc
driver-class-name: com.mysql.cj.jdbc.Driver
#配置druid数据源,因为阿里有整套的解决方案
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 5
max-active: 20
min-idle: 5
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
validation-query: SELECT 1 FROM DUAL
test-on-borrow: false
test-on-return: false
test-while-idle: true
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
filter:
stat:
enabled: true
db-type: mysql
log-slow-sql: true
slow-sql-millis: 2000
wall:
enabled: true
slf4j:
enabled: true
keep-alive: true
# 监控过滤器
web-stat-filter:
enabled: true
exclusions:
- "*.js"
- "*.gif"
- "*.jpg"
- "*.png"
- "*.css"
- "*.ico"
- "/druid/*"
#exclusions可以是list格式配置,也可以是String格式
# exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
# druid 监控页面
stat-view-servlet:
enabled: true
url-pattern: /druid/*
reset-enable: false
login-username: admin
login-password: 123456
#拒绝本机连接
deny: 192.168.32.103
对上面的配置文件做解释,如下:
- 关于这些 username、password、url、driver-class-name,既可以配置在
spring.datasource
下,也可以配置在spring.datasource.druid
下。配置在druid下的好处是,配置多数据源时可以简化某些操作。上面的url属性中我使用的是docker中的mysql容器地址,大家自行修改为自己的 - filter属性必须配置stat、wall、slf4j,druid后台的某些功能才会正常,否则会缺少某些东西
- stat-view-servlet必须配置enabled: true,否则访问不了首页。如果配置了,仍访问不了,查看配置的格式是否正确,比如是否与其他属性在同一级别,与上层属性比较是否有缩进2个空格。99%都是格式出现问题
- deny、allow可配可不配
- exclusions属性既可以使用list格式配置,也可以使用String格式配置(前提是使用双引号将内容括起来)
3.3 配置DruidDataSource
使用druid-starter依赖来配置,无需写配置类注册那些WebStatFilter
、StatViewServlet
,但仍需要注册DruidDataSource,代码如下:
@Configuration
public class DruidConfig {
@Primary
@Bean
@ConfigurationProperties("spring.datasource.druid")
public DruidDataSource dataSource(){
return DruidDataSourceBuilder.create().build();
}
}
3.4 测试
如果要测试,则可以使用下面的代码(前提是要创建好表):
@Controller
public class HelloController {
@Autowired
JdbcTemplate jdbcTemplate;
@ResponseBody
@GetMapping("/query")
public Map<String, Object> map(){
List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from department");
return list.get(0);
}
}
测试效果: