一、使用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