分享

SpringBoot整合Durid

 码农9527 2021-07-16

上一篇我们整合了MySQL和JDBCTemplate,并在结尾完成了双数据源的配置和插入动作。当我们将数据插入成功后,查看控制台就会发现,我们已经使用了默认的数据库连接池HikariDataSource。  

SpringBoot整合Durid

除了HikariDataSource这款SpringBoot默认的数据库连接池外,还支持其他数据库连接池,比如本篇将要介绍的另一种优秀的数据库连接池——阿里巴巴Durid!  

Durid  

为监控而生的数据库连接池,它是阿里巴巴开源平台上的一个项目,集成了SQL监控,黑名单拦截等功能,拥有强大的监控特性。通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。  

首先在.xml文件中添加依赖:  

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.1.9</version>
</dependency>12345复制代码类型:[java]

随后我们要配置application.yml文件,完整版如下:  

server:
  port: 8888spring:
  jackson:
 date-format: yyyy-MM-dd HH:mm:ss
 time-zone: GMT+8

  datasource:
 #配置连接池的相关的信息
 druid:
   # 初始连接数量(默认值为0)
   initial-size: 5
   # 最小空闲连接数,即使连接使用的少了,也还是会保留min-idle个连接
   min-idle: 10
   # 最大连接数(不能设置太大)
   max-active: 20
   # 获取连接时的最大等待时间(单位是ms)
   max-wait: 50000
   # 一个连接在池中最小生存的时间(单位是ms)
   min-evictable-idle-time-millis: 150000
   # 检测需要关闭空闲连接的时间(单位是ms)
   time-between-eviction-runs-millis: 50000
   # 配置扩展插件:去掉后,监控界面的sql无法统计(stat-监控统计,log4j-日志,wall-防火墙,防止SQL注入)
   filters: stat,wall,log4j2
   # 配置慢sql展示语句,slowSqlMillis对应的是慢查询语句的时间
   connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=10
   # 检测连接是否有效,为空时以下三个配置均无效
   validation-query: SELECT 1 DROM DUAL
   # 申请连接时执行validationQuery检测连接是否有效,默认true,开启后会降低性能
   test-on-borrow: true
   # 归还连接时执行validationQuery检测连接是否有效,默认false,开启后会降低性能
   test-on-return: true
   # 申请连接时如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,默认false,建议开启,不影响性能
   test-while-idle: true
   # 配置登录相关信息
   stat-view-servlet:
  # 是否开启 StatViewServlet
  enabled: true
  #配置访问网址
  url-pattern: "/druid/*"
  # 访问监控页面 白名单,默认127.0.0.1
  allow: 127.0.0.1
  # 访问监控页面 黑名单,黑名单不能访问
  deny: 192.168.111.112
  # 访问监控页面 登陆账号
  login-username: JavaFamily
  # 访问监控页面 登陆密码
  login-password: JavaFamily
  # 是否可以重置数据源
  reset-enable: true
   # 配置监控
   web-stat-filter:
  exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
  enabled: true
  url-pattern: "/*"

 family:
   driver-class-name: com.mysql.cj.jdbc.Driver
   type: com.alibaba.druid.pool.DruidDataSource
   url: jdbc:mysql://localhost:3306/Family?serverTimezone=GMT%2b8&characterEncoding=utf-8
   username: root
   password: 123456

 family2:
   driver-class-name: com.mysql.cj.jdbc.Driver
   type: com.alibaba.druid.pool.DruidDataSource
   url: jdbc:mysql://localhost:3306/Family2?serverTimezone=GMT%2b8&characterEncoding=utf-8
   username: root
   password: 12345612345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970复制代码类型:[java]

将以上依赖注入,配置完成后,我们修改一下DataSourceConfig.java中的代码:  

@Configurationpublic class DataSourceConfig { // 当一个接口有多个时候实现类的时候,如果Spring只能选一个实现进行依赖注入时,就选这个数据源(默认数据源)
 @Primary
 @Bean(name = "familyDataSource")
 @ConfigurationProperties(prefix = "spring.datasource.family")
 public DataSource familyDataSource() {  return DruidDataSourceBuilder.create().build();
 } @Bean(name = "family2DataSource")
 @ConfigurationProperties(prefix = "spring.datasource.family2")
 public DataSource family2DataSource() {  return DruidDataSourceBuilder.create().build();
 } @Bean(name="familyJdbcTemplate")
 public JdbcTemplate familyJdbcTemplate (@Qualifier("familyDataSource") DataSource datasource) {  return new JdbcTemplate(datasource);
 } @Bean(name="family2JdbcTemplate")
 public JdbcTemplate family2JdbcTemplate(@Qualifier("family2DataSource") DataSource datasource) {  return new JdbcTemplate(datasource);
 }

}1234567891011121314151617181920212223242526272829复制代码类型:[java]

将原本的DataSourceBuilder换成红色标记部分。  

SQL监控  

准备工作完成后,运行代码,在浏览器输入http://localhost:8888/druid/login.html,跳转到登陆页面,输入用户名:JavaFamily,密码:JavaFamily  SpringBoot整合Durid

完成登陆后选择SQL监控:  SpringBoot整合Durid

由于还没有进行数据库操作,暂时没有监控内容。  

我们在postman执行插入操作:  

SpringBoot整合Durid

这时我们在回到浏览器查看SQL监控结果:  

SpringBoot整合Durid

如果想要查看Durid的数据,那么就需要在controller中添加代码。

@GetMapping("/data")public Object druid(){ return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
}1234复制代码类型:[java]

Durid数据:  

@GetMapping("/data") public Object druid(){     return DruidStatManagerFacade.getInstance().getDataSourceStatDataList(); }

慢SQL查询  

我们使用之前讲过的PetsController.java中通过id对宠物进行查询方法,在postman中进行查询操作:  

SpringBoot整合Durid

由于id的值不同,会导致查询的sql时间不一致,我们查询多个不同的id就会发现最慢sql:  

SpringBoot整合Durid

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多