Spring Boot配置Druid连接池详解

一、使用Spring Boot配置Druid连接池

在Spring Boot应用程序中,使用Druid连接池需要使用Druid起步依赖。 首先,在pom.xml文件中添加以下配置:

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

接下来,在application.properties或application.yml文件中配置Druid的相关属性:

# 数据源绑定在JNDI上(负责人请注意设置合适的jndi和对应的数据源)
spring.datasource.jndi-name=...
# ==============================================================
# Druid 配置
# ==============================================================
# 指定数据源类型,常用MySQL、Oracle、H2等
# 建议配置为spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# Tomcat 数据库连接池配置为org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/db_name?Unicode=true&characterEncoding=UTF-8
# 数据库连接用户名
spring.datasource.username=username
# 数据库连接密码
spring.datasource.password=password
# 数据库连接池初始化大小
spring.datasource.initial-size=5
# 数据库连接池最小连接数
spring.datasource.min-idle=5
# 数据库连接池最大连接数
spring.datasource.max-active=20
# 获取连接最大等待时间(单位毫秒)
spring.datasource.max-wait=30000
# 配置获取连接等待超时处理
spring.datasource.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 配置Druid监控
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*

Druid连接池的特点是能够提供详细的统计信息和数据,可以在应用程序中方便地实现监视和调优,从而达到更好的性能。

二、Druid连接池监控

Druid连接池提供了一个内置的监视器和一个可选的过滤器,可以帮助监视数据库连接池中的连接、事务、缓存和其他相关的统计信息。在使用Spring Boot配置Druid连接池时,只需要在配置文件(application.yml 或 application.properties)中添加配置即可。

监控连接池的统计信息,需要配置一些参数,如下所示:

# 开启Druid监控统计功能
spring.datasource.druid.stat-view-servlet.enabled=true
# 配置监控统计拦截的URL,如果不配置,默认监控所有请求,可以配置多个,多个逗号隔开
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 过滤一些不监控的连接
spring.datasource.druid.web-stat-filter.exclusions=/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*

Druid连接池监控信息的访问地址为:http://localhost:8080/druid/index.html。

三、Druid连接池性能优化

1. 开启预处理

在高并发场景下,开启预处理可以显著提高性能。在Spring Boot中,可以使用以下配置开启预处理:

mybatis.configuration.default-executor-type=REUSE
spring.datasource.druid.initial-size=1
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20

2. 使用DruidStatInterceptor统计SQL执行时间

可以使用Druid提供的拦截器DruidStatInterceptor来统计SQL执行时间。

@Configuration
public class DruidConfig {
    @Bean
    public DruidStatInterceptor druidStatInterceptor() {
        return new DruidStatInterceptor();
    }

    @Bean
    public DruidStatInterceptorConfigurer druidStatInterceptorConfigurer() {
        return new DruidStatInterceptorConfigurer();
    }

    private static class DruidStatInterceptorConfigurer extends AbstractInterceptorConfigurer {
        @Override
        public void configure(InterceptorRegistry registry) {
            registry.addInterceptor(druidStatInterceptor());
        }
    }
}

3. 配置timeBetweenEvictionRunsMillis

可以通过配置timeBetweenEvictionRunsMillis,使Druid连接池定期检查连接池中的连接是否有效,通过连接池中的心跳线程(keepAlive)进行检查。如果连接超过指定的时长没有使用,Druid连接池会自动关闭这些连接。一般建议设置该值为30秒到1分钟之间。

druid.timeBetweenEvictionRunsMillis=120000

4. 配置testWhileIdle和validationQuery

可以通过配置testWhileIdle和validationQuery,使Druid连接池定期检查连接池中的连接是否有效,验证SQL是否可用。如果连接超过指定的时长没有使用,Druid连接池也会自动关闭这些连接。

spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/238660.html

相关推荐

  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 银行资金管理系统总结

    银行资金管理系统是银行日常业务运营的核心支撑系统,主要负责处理银行的资金流动、结算、清算等业务。本文将从功能特点、技术架构、安全性以及未来发展趋势等多个方面对银行资金管理系统进行详…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • 如何修改mysql的端口号

    本文将介绍如何修改mysql的端口号,方便开发者根据实际需求配置对应端口号。 一、为什么需要修改mysql端口号 默认情况下,mysql使用的端口号是3306。在某些情况下,我们需…

    编程 2025-04-29
  • 英语年龄用连字符号(Hyphenation for English Age)

    英语年龄通常使用连字符号表示,比如 “five-year-old boy”。本文将从多个方面探讨英语年龄的连字符使用问题。 一、英语年龄的表达方式 英语中表…

    编程 2025-04-29
  • Idea新建文件夹没有java class的解决方法

    如果你在Idea中新建了一个文件夹,却没有Java Class,应该如何解决呢?下面从多个方面来进行解答。 一、检查Idea设置 首先,我们应该检查Idea的设置是否正确。打开Id…

    编程 2025-04-29
  • 金额选择性序列化

    本文将从多个方面对金额选择性序列化进行详细阐述,包括其定义、使用场景、实现方法等。 一、定义 金额选择性序列化指根据传入的金额值,选择是否进行序列化,以达到减少数据传输的目的。在实…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29