Springboot中如何集成Druid

 更新时间:2023年06月12日 16:20:59   作者:明月一壶酒  
Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,本篇主要讲解一下 Springboot中如何集成 Druid ,感兴趣的朋友跟随小编一起看看吧

Springboot 集成Druid

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。本篇主要讲解一下 Springboot中如何集成 Druid !

1.添加Druid依赖

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

有不少教程建议的依赖是

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
</dependency>

其实Druid和Springboot官方已经提供了很好的集成,虽然二者都可以使用,但是druid-spring-boot-starter不需要编写配置类,简化了配置。

2.添加配置application.yaml

spring:
  datasource:
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
    type: com.alibaba.druid.pool.DruidDataSource
    # 数据源连接池配置
    druid:
      #   数据源其他配置
      initialSize: 5
      minIdle: 5
      maxActive: 20
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      useGlobalDataSourceStat: true
      connectionProperties: druid.stat.mergeSql=true;druid.stat.logSlowSql=true;druid.stat.slowSqlMillis=1000;
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,slf4j
      #配置监控属性: 在druid-starter的: com.alibaba.druid.spring.boot.autoconfigure.stat包下进行的逻辑配置
      # WebStatFilter配置,
      web-stat-filter:
        #默认为false,表示不使用WebStatFilter配置,就是属性名去短线
        enabled: true
        #拦截该项目下的一切请求
        url-pattern: /*
        #对这些请求放行
        exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico
        session-stat-enable: true
        principal-session-name: session_name
        principal-cookie-name: cookie_name
      # StatViewServlet配置
      stat-view-servlet:
        #默认为false,表示不使用StatViewServlet配置,就是属性名去短线
        enabled: true
        #配置DruidStatViewServlet的访问地址。后台监控页面的访问地址
        url-pattern: /druid/*
        #禁用HTML页面上的“重置”功能,会把所有监控的数据全部清空,一般不使用
        reset-enable: false
        #监控页面登录的用户名
        login-username: admin
        #监控页面登录的密码
        login-password: 123456
        #白名单
        allow:
        #黑名单
        deny:
      #Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
      aop-patterns: com.zzp.*

有几个地方需要注意下:

  • 想要在日志中输出慢日志除了配置connectionProperties,还需要在filters属性中加入项目使用的日志框架如log4j或者slf4j,并引入对应依赖,否则日志中不会输出慢sql日志;
  • 如果需要Spring监控,除了配置aop-patterns,还需要加入spring-boot-starter-aop依赖,否则Spring监控页面空白。

3.查看监控页面

访问http://ip:port/druid/login.html,输入账号密码,如果数据源页面各项参数和配置的参数一样,则说明集成成功。

调用接口,查看SQL监控和Spring监控页面是否正常显示。

4.去除广告

监控页面下方有阿里云的广告,可以通过代码去除。

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
import com.alibaba.druid.util.Utils;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import java.io.IOException;
/**
 * Druid广告配置
 *
 * @author zzp
 */
@Configuration
@ConditionalOnWebApplication
@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
@ConditionalOnProperty(
        name = "spring.datasource.druid.stat-view-servlet.enabled",
        havingValue = "true",
        matchIfMissing = true)
public class DruidAdConfig {
    /**
     * 去除监控页面底部广告
     *
     * @param properties
     * @return org.springframework.boot.web.servlet.FilterRegistrationBean
     */
    @Bean
    public FilterRegistrationBean removeDruidAdFilterRegistrationBean(
            DruidStatProperties properties) {
        // 获取web监控页面的参数
        DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
        // 提取common.js的配置路径
        String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
        String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
        final String filePath = "support/http/resources/js/common.js";
        // 创建filter进行过滤
        Filter filter =
                new Filter() {
                    @Override
                    public void init(FilterConfig filterConfig) throws ServletException {}
                    @Override
                    public void doFilter(
                            ServletRequest request, ServletResponse response, FilterChain chain)
                            throws IOException, ServletException {
                        chain.doFilter(request, response);
                        // 重置缓冲区,响应头不会被重置
                        response.resetBuffer();
                        // 获取common.js
                        String text = Utils.readFromResource(filePath);
                        // 正则替换banner, 除去底部的广告信息
                        text = text.replaceAll("<a.*?banner\"></a><br/>", "");
                        text = text.replaceAll("powered.*?shrek.wang</a>", "");
                        response.getWriter().write(text);
                    }
                    @Override
                    public void destroy() {}
                };
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(filter);
        registrationBean.addUrlPatterns(commonJsPattern);
        return registrationBean;
    }
}

完结!

到此这篇关于Springboot 集成Druid的文章就介绍到这了,更多相关Springboot 集成Druid内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java解析JSON的六大工具介绍与对比

    Java解析JSON的六大工具介绍与对比

    在 Java 开发中,解析 JSON 是一个非常常见的需求,不管是和前端交互、调用第三方接口,还是处理配置文件,本文总结了6种主流的 JSON 解析方法,希望对大家有所帮助
    2025-01-01
  • java中http请求之restTemplate配置超时时间问题解决

    java中http请求之restTemplate配置超时时间问题解决

    这篇文章主要介绍了java中http请求之restTemplate配置超时时间,本文给大家分享三种解决方法,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Java 构造器原理及用法解析

    Java 构造器原理及用法解析

    这篇文章主要介绍了Java 构造器原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • springboot使用Thymeleaf报错常见的几种解决方案

    springboot使用Thymeleaf报错常见的几种解决方案

    这篇文章主要介绍了springboot使用Thymeleaf报错常见的几种解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java纯代码实现导出pdf合并单元格

    Java纯代码实现导出pdf合并单元格

    这篇文章主要为大家详细介绍了Java如何纯代码实现导出pdf与合并单元格功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • Java使用easyExcel导出数据及单元格多张图片

    Java使用easyExcel导出数据及单元格多张图片

    除了平时简单的数据导出需求外,我们也经常会遇到一些有固定格式或者模板要求的数据导出,下面这篇文章主要给大家介绍了关于Java使用easyExcel导出数据及单元格多张图片的相关资料,需要的朋友可以参考下
    2023-05-05
  • Java经典设计模式之观察者模式原理与用法详解

    Java经典设计模式之观察者模式原理与用法详解

    这篇文章主要介绍了Java经典设计模式之观察者模式,简单分析了观察者模式的概念、原理并结合实例形式给出了java观察者模式的具体用法与相关注意事项,需要的朋友可以参考下
    2017-08-08
  • 基于批处理脚本bat打造一个高效Java版本切换工具

    基于批处理脚本bat打造一个高效Java版本切换工具

    本文介绍了作者开发的一款用于Windows系统多Java版本自动化管理的批处理工具,该工具具备自动扫描JDK目录、智能识别版本号、权限管理、双重设置、清理重复路径、实时验证等功能,需要的朋友可以参考下
    2026-01-01
  • SpringBoot同一接口多个实现类配置的实例详解

    SpringBoot同一接口多个实现类配置的实例详解

    这篇文章主要介绍了SpringBoot同一接口多个实现类配置的实例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java 分位点(分位值)计算方式

    Java 分位点(分位值)计算方式

    这篇文章主要介绍了Java 分位点(分位值)计算方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论