Springboot整合Druid

小灰灰 2023-06-22 13:35 93阅读 0赞

概述

前面的Spingboot整合mybatis、Spingboot整合JDBCTemplate、Spingboot整合JPA 三篇文章中使用的数据库连接池都是Spingboot默认配置的tomcat.jdbc.pool。配置原理进入org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration类查看,根据通过spring.datasource.type配置其他连接池,当然我们也可以配置指定的数据库连接池比如Druid。配置Druid有两种方式

第一种

配置传统的Druid(不推荐,了解)

导入依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid</artifactId>
  4. <version>1.1.9</version>
  5. </dependency>

配置文件中配置

  1. #不指定spring.datasource.type 默认的连接池是tomcat.jdbc.pool
  2. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  3. # 数据源其他配置
  4. spring.datasource.initialSize:5
  5. spring.datasource.minIdle:5
  6. spring.datasource.maxActive:20
  7. spring.datasource.maxWait:60000
  8. spring.datasource.timeBetweenEvictionRunsMillis:60000
  9. spring.datasource.minEvictableIdleTimeMillis:300000
  10. spring.datasource.validationQuery:SELECT 1 FROM DUAL
  11. spring.datasource.testWhileIdle:true
  12. spring.datasource.testOnBorrow:false
  13. spring.datasource.testOnReturn:false
  14. spring.datasource.poolPreparedStatements:true
  15. # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
  16. spring.datasource.filters: stat,wall,log4j
  17. spring.datasource.maxPoolPreparedStatementPerConnectionSize: 20
  18. spring.datasource.useGlobalDataSourceStat: true
  19. spring.datasource.connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

查看关于数据源配置类如下,我们知道boot并没有配置以上我们制定的属性。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDkxNTA4_size_16_color_FFFFFF_t_70

所以我们需要自己配置

  1. import com.alibaba.druid.pool.DruidDataSource;
  2. import com.alibaba.druid.support.http.StatViewServlet;
  3. import com.alibaba.druid.support.http.WebStatFilter;
  4. import com.sun.org.apache.xml.internal.resolver.helpers.PublicId;
  5. import org.springframework.boot.context.properties.ConfigurationProperties;
  6. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  7. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import javax.sql.DataSource;
  11. import java.util.Arrays;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14. /**
  15. * @Author lupenghu
  16. * @Des
  17. * @Date create in 14:232019/6/6
  18. * @
  19. */
  20. //数据源配置
  21. @Configuration
  22. public class DruidConfig {
  23. //以spring.datasource为前缀的都配置进来
  24. @ConfigurationProperties(prefix = "spring.datasource")
  25. //自定一个数据源 并注入容器中
  26. @Bean
  27. public DataSource druid() {
  28. return new DruidDataSource();
  29. }
  30. //这里也可以配置druid監控
  31. //1、配置一个管理后台的Servlet
  32. @Bean
  33. public ServletRegistrationBean statViewServlet(){
  34. ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
  35. Map<String,String> initParams = new HashMap<>();
  36. //里面配置哪些可以进入StatViewServlet查看
  37. initParams.put("loginUsername","lphluck");
  38. initParams.put("loginPassword","123123");
  39. initParams.put("allow","");//默认就是允许所有访问
  40. initParams.put("deny","192.168.15.21");//拒绝访问
  41. bean.setInitParameters(initParams);
  42. return bean;
  43. }
  44. //2、配置一个web监控的filter
  45. @Bean
  46. public FilterRegistrationBean webStatFilter(){
  47. FilterRegistrationBean bean = new FilterRegistrationBean();
  48. bean.setFilter(new WebStatFilter());
  49. Map<String,String> initParams = new HashMap<>();
  50. //不拦截
  51. initParams.put("exclusions","*.js,*.css,/druid/*");
  52. bean.setInitParameters(initParams);
  53. //拦截所有请求
  54. bean.setUrlPatterns(Arrays.asList("/*"));
  55. return bean;
  56. }
  57. }

测试,浏览器访问后台

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDkxNTA4_size_16_color_FFFFFF_t_70 1

第二种

直接使用案例Druid专门为Springboot提供的druid-stater依赖,以上传统的druid我们还需自己定义配置类,通过第二种方式只需要引入 druid的start依赖并添加相关的一些配置即可。

引入依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid-spring-boot-starter</artifactId>
  4. <version>1.1.10</version>
  5. </dependency>

配置

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://127.0.0.1:3306/mysql?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
  4. username: root
  5. password: root
  6. driver-class-name: com.mysql.cj.jdbc.Driver
  7. # 使用 druid 作为连接池 更多配置的说明可以参见 druid starter 中文文档 https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
  8. type: com.alibaba.druid.pool.DruidDataSource
  9. druid:
  10. # 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
  11. initialSize: 5
  12. # 最小连接池数量
  13. minIdle: 5
  14. # 最大连接池数量
  15. maxActive: 10
  16. # 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。
  17. maxWait: 60000
  18. # Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于 minEvictableIdleTimeMillis 则关闭物理连接。
  19. timeBetweenEvictionRunsMillis: 60000
  20. # 连接保持空闲而不被驱逐的最小时间
  21. minEvictableIdleTimeMillis: 300000
  22. # 用来检测连接是否有效的 sql 因数据库方言而差, 例如 oracle 应该写成 SELECT 1 FROM DUAL
  23. validationQuery: SELECT 1
  24. # 建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,执行 validationQuery 检测连接是否有效。
  25. testWhileIdle: true
  26. # 申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
  27. testOnBorrow: false
  28. # 归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
  29. testOnReturn: false
  30. # 是否自动回收超时连接
  31. removeAbandoned: true
  32. # 超时时间 (以秒数为单位)
  33. remove-abandoned-timeout: 180
  34. # druid 监控的配置 如果不使用 druid 的监控功能的话 以下配置就不是必须的
  35. # 本项目监控台访问地址: http://localhost:8080/druid/login.html
  36. # WebStatFilter 用于采集 web-jdbc 关联监控的数据。
  37. # 更多配置可参见: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter
  38. web-stat-filter:
  39. # 是否开启 WebStatFilter 默认是 true
  40. enabled: true
  41. # 需要拦截的 url
  42. url-pattern: /*
  43. # 排除静态资源的请求
  44. exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
  45. # Druid 内置提供了一个 StatViewServlet 用于展示 Druid 的统计信息。
  46. # 更多配置可参见:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE
  47. stat-view-servlet:
  48. #是否启用 StatViewServlet 默认值 true
  49. enabled: true
  50. # 需要拦截的 url
  51. url-pattern: /druid/*
  52. # 允许清空统计数据
  53. reset-enable: true
  54. login-username: druid
  55. login-password: druid
  56. # mybatis 相关配置
  57. mybatis:
  58. configuration:
  59. # 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。
  60. # oracle 数据库建议配置为 JdbcType.NULL, 默认是 Other
  61. jdbc-type-for-null: 'null'
  62. # 是否打印 sql 语句 调试的时候可以开启
  63. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

测试sql监控

在 Spring Boot 中可以通过 HTTP 接口将 Druid 的监控数据以 JSON 的形式暴露出去,可以用于健康检查等功能:

  1. @RestController
  2. public class DruidStatController {
  3. @GetMapping("/stat")
  4. public Object druidStat() {
  5. // DruidStatManagerFacade#getDataSourceStatDataList 该方法可以获取所有数据源的监控数据
  6. return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
  7. }
  8. }

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDkxNTA4_size_16_color_FFFFFF_t_70 2

默认访问地址为 http://localhost:8080/druid/login.html

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NDkxNTA4_size_16_color_FFFFFF_t_70 3

可以关注我的公众号 java一号

发表评论

表情:
评论列表 (有 0 条评论,93人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot整合Druid

    SpringBoot整合Druid 简介:Druid是阿里巴巴提供的数据库连接池,文本讲解SpringBoot整合Druid。 创建项目 ![在这里插入图片描述]

    相关 Springboot 整合 Druid

    Druid( [阿里巴巴开源项目 Druid][Druid])首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件