首页 > 其他分享 >SpringBoot配置Druid连接池

SpringBoot配置Druid连接池

时间:2024-06-21 18:29:03浏览次数:20  
标签:SpringBoot druid Druid bean import initParams 连接 连接池

简介:

    连接池的作用是为了提高性能,将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对Server端进行访问。这样省略(复用)了创建连接和销毁连接的过程(TCP连接建立时的三次握手和销毁时的四次握手),从而在性能上得到了提高。Druid是一个JDBC组件,它包括三部分:DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系、DruidDataSource 高效可管理的数据库连接池、SQLParser。可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

一.SpringBoot配置Druid连接池

1.在pom.xml中引用

<!-- 数据库 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<!--引入阿里巴巴druid连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.6</version>
</dependency>
<!--自启动Druid管理后台-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
2.配置application.yml

server:
  port: 8083
  session:
    timeout: 1800
spring:
  aop:
    auto: true
    proxy-target-class: false
  thymeleaf:
    #验证模板是否存在
    check-template: false
    check-template-location: false
    mode: HTML
    prefix: classpath:/templates/
  profiles:
    active: dev
    #连接池的配置信息
  druid:
    ## 初始化大小,最小,最大
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxPoolPreparedStatementPerConnectionSize: 20
    ## 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    poolPreparedStatements: true
    #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。testOnBorrow: false
    #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。testOnReturn: false
    #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。testWhileIdle: true
    #连接保持空闲而不被驱逐的最小时间
    timeBetweenEvictionRunsMillis: 60000
    #用来检测连接是否有效的sql,要求是一个查询语句
    validationQuery: SELECT 1 FROM DUAL
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    useGlobalDataSourceStat: true
    loginUsername: admin  # SQL监控后台登录用户名
    loginPassword: 1  # SQL监控后台登录用户密码
3.新建一个Druid的配置文件DruidConfig

package com.tms.tblog.infrastructure.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

/**
 * Druid连接池配置
 */
@Configuration
public class DruidConfig {

    @Value("${spring.druid.loginUsername}")
    private String loginUsername;

    @Value("${spring.druid.loginPassword}")
    private String loginPassword;

    //加载application.yaml中的Druid配置
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid() {
        return new DruidDataSource();
    }

    //配置Druid的监控
    //1、配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String, String> initParams = new HashMap<>();

        initParams.put("loginUsername", loginUsername);// druid的密码
        initParams.put("loginPassword", loginPassword); // druid的用户名
        initParams.put("allow", ""); // 默认就是允许所有访问 IP白名单 (没有配置或者为空,则允许所有访问)
        initParams.put("deny", "");  // IP黑名单 (存在共同时,deny优先于allow)

        bean.setInitParameters(initParams);
        return bean;
    }

    /**
     * 配置一个web监控的filter
     * @return
     */
    @Bean
    public FilterRegistrationBean webStatFilter() {

        FilterRegistrationBean bean = new FilterRegistrationBean(new WebStatFilter());
        // 添加过滤规则
        Map<String, String> initParams = new HashMap<>(1);
        // 设置忽略请求
        initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
        bean.setInitParameters(initParams);
        bean.addInitParameter("profileEnable", "true");
        bean.addInitParameter("principalCookieName", "USER_COOKIE");
        bean.addInitParameter("principalSessionName", "");
        bean.addInitParameter("aopPatterns", "com.example.demo.service");
        // 验证所有请求
        bean.addUrlPatterns("/*");
        return bean;
    }
}

二.运行结果

1.启动程序然后在浏览器上输入http://localhost:8083/druid进入登录界面,输入druid的用户名密码就能登录进去了

标签:SpringBoot,druid,Druid,bean,import,initParams,连接,连接池
From: https://blog.csdn.net/weixin_53391173/article/details/139719996

相关文章

  • SpringBoot+AOP+Redis自定义注解实现防重复提交
    1.哪些因素会引起重复提交?开发项目过程中可能会出现下面这些情况:前端下单按钮重复点击导致订单创建多次网速等原因造成页面卡顿,用户重复刷新提交请求黑客或恶意用户使用Postman等http工具重复恶意提交表单2.重复提交会带来哪些问题?重复提交带来的问题:会导致数据......
  • OA自动化办公: springboot集成Activiti7
    一.场景引入    我在实际开发中遇到过这样一个需求:公民登录建议征集系统向大冶市某个人大代表提建议,但建议提出后人大代表未能及时响应,此时如果建议越来越多,就会导致建议被搁置。很多建议不会被处理,公民自然也就得不到反馈,这对于汇聚民生民意和征集建议显然是不利的。......
  • springboot 前后端大打包成一个JAR
    1.概述现在开发使用前后端开发机制,在部署的时候,我们需要将前后端分别打包,使用nginx进行统一部署。这样就比较复杂,我们可以使用前后端打包到一个jar中,这样我们只需要一个包就可以了。2.实现我们只需要将前端的编译好的文件,在打包时,将前端文件copy到resources目录下的stat......
  • SpringBoot 项目启动后监听器执行操作:ContextRefreshEvent
    一Springboot运行时,会依次发送以下事件1. ApplicationStartingEvent 2. ApplicationEnvironmentPreparedEvent:当Environment已经准备好,在context创建前3. ApplicationContextInitializedEvent:在ApplicationContext创建和ApplicationContextInitializer都被调用后,但是......
  • 基于springboot地方废物回收机构管理系统
    收藏关注不迷路||项目不适合可以浏览博主其他项目文章项目源码||毕设定制||远程支持||可联系博主---------------同类型文章链接--------------------------java项目设计专栏1项目基于springboot地方废物回收机构管理系统本系统的核心价值观在于为用户打造一个便......
  • 计算机Java项目|SpringBoot在线宠物用品交易网站
    作者主页:编程指南针作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互......
  • Springboot+Vue+Mybatis-Plus+Easyexcel实现文件导入+导出的excel单元格下拉列表
    引言文件的导入与导出功能扮演着至关重要的角色,特别是在处理大量数据和复杂的表格时。通过整合SpringBoot、Vue、Mybatis-Plus和Easyexcel等先进技术,我们可以构建一个高效、灵活的文件处理系统。其中,Excel作为广泛使用的电子表格软件,其单元格下拉列表功能对于数据录入和校验......
  • 基于Springboot的CSGO赛事管理系统(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的CSGO赛事管理系统(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统......
  • ssm springmvc springboot区别
    pom.xml文件里看ssm<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web......
  • Java毕业设计 基于springboot vue音乐网站
    Java毕业设计基于springbootvue音乐网站SpringBoot音乐网站功能介绍首页图片轮播歌曲信息歌曲分类歌曲详情歌曲播放音乐下载评论注册登录个人中心更新信息用户后台:登录个人中心修改密码个人信息音乐下载管理员:登录个人中心修改密码个人信息用户管......