您的位置:

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