当前位置: 代码迷 >> 综合 >> SpringBoot => Druid 使用
  详细解决方案

SpringBoot => Druid 使用

热度:48   发布时间:2023-11-27 01:54:24.0

1、Druid 是什么

Druid 是一个 JDBC 组件,包括三部分:

  • DruidDriver 代理 Driver,能够提供基于 Filter - Chain 模式的插件体系
  • DruidDataSource 高效可管理的数据库连接池
  • SQLParser

Druid 官网:https://druid.apache.org/

官方下载:https://github.com/alibaba/druid

官方文档:https://druid.apache.org/docs/latest/design/index.html

2、Druid 的作用

  • 可以监控数据库访问性能,内置提供了一个 StatFilter 插件,能够详细统计 SQL 的执行性能,对线上分析数据库访问性能有帮助。
  • 替换 DBCP 和 C3P0,Druid 提供了一个高效,功能强大,可扩展性好的数据库连接池
  • SQL 执行日志,提供了不同的 LogFilter,支持 Common-Logging、Log4j 和 JdkLog

2、导入 maven 依赖

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.22</version>
</dependency>

3、DruidDataSource 配置

Druid 配置:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE

spring:datasource:# 基本属性username: usernamepassword: passwordurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource# 连接池属性druid:# 配置初始化大小,最大,最小initial-size: 1max-active: 20min-idle: 1# 连接等待超时时间max-wait: 6000# 多久进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000# 在连接池中最小的生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000test-while-idle: truetest-on-borrow: falsetest-on-return: falsepool-prepared-statements: truemax-open-prepared-statements: 20keep-alive: trueasync-init: truephy-max-use-count: 500# 监控器拦截的 filtersfilters: stat

4、Druid Servlet 配置

web.xml 配置

<servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><!-- 配置 Druid 监控信息显示页面 -->  <init-param>  <!-- 允许清空统计数据 -->  <param-name>resetEnable</param-name>  <param-value>true</param-value>  </init-param>  <init-param>  <!-- 用户名 -->  <param-name>loginUsername</param-name>  <param-value>username</param-value>  </init-param>  <init-param>  <!-- 密码 -->  <param-name>loginPassword</param-name>  <param-value>password</param-value>  </init-param><!-- 访问控制deny 优先于allowallow 没有配置或者为空,允许所有访问,不支持 IPV6--><init-param><param-name>allow</param-name><param-value>128.242.127.1/24,128.242.128.1</param-value></init-param><init-param><param-name>deny</param-name><param-value>128.242.127.4</param-value></init-param><!-- 配置 resetEnable,允许清空统计数据 --><init-param><param-name>resetEnable</param-name><param-value>true</param-value></init-param>
</servlet>
<servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern>
</servlet-mapping>

SpringBoot 配置

@Configuration
public class DruidConfig {
    @Bean@ConfigurationProperties(prefix = "spring.datasource")public DataSource druidDataSource(){
    return new DruidDataSource();}// Druid 后台监控// SpringBoot 内置 Servlet 容器,没有 web.xml,替代方式:ServletRegistrationBean@Beanpublic ServletRegistrationBean servletRegistrationBean(){
    ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");// 后台登录,账号密码设置HashMap<String, String> map = new HashMap<>();// 增加配置,key 为固定值map.put("loginUsername", "username");map.put("loginPassword", "password");// 允许谁访问,为空代表所有人可以访问map.put("allow", "");// 禁止访问地址map.put("name", "IP");bean.setInitParameters(map);return bean;}// 过滤器@Beanpublic FilterRegistrationBean filterRegistrationBean(){
    FilterRegistrationBean bean = new FilterRegistrationBean();bean.setFilter(new WebStatFilter());HashMap<String, String> map = new HashMap<>();// 过滤路径bean.addUrlPatterns("/*");// 忽略过滤的形式map.put("exclusions", "*.js,*.css,*.png,*.gif,*.ico,/druid/*");// 过滤的请求bean.setInitParameters(map);return bean;}}

5、访问 Druid 后台

http://localhost:8080/druid/login.html

在这里插入图片描述

  相关解决方案