概念
Druid是一款高性能、可扩展、功能丰富的数据库连接池。它由阿里巴巴开发,是一个开源项目,被广泛应用在各种Java应用程序中。
特点
- 高性能:Druid的连接池使用了一些优化技巧,可以提升连接池的性能和稳定性,并降低锁竞争和资源消耗。
- 可扩展:Druid支持基于插件的架构,可以方便地扩展和定制功能,比如添加日志和监控功能。
- 功能丰富:Druid不仅仅具备连接池的基本功能,还支持很多高级功能,如:防SQL注入、监控统计、缓存管理、数据源路由等。
- 易于配置:Druid采用简单直观的XML配置方式,使得配置起来非常容易。
- 易于与Spring集成:Druid提供了简单易用的DataSource接口,很容易与Spring集成,只需要修改配置文件即可。
- 提供监控:Druid提供了丰富的监控工具,可以监控应用程序对数据库的访问情况,包括访问次数、访问时间、SQL执行时间等。
属性
- 连接池配置:
这些属性都是用于设置数据库连接信息的,指定了数据库驱动、连接字符串、用户名和密码等。这些属性是配置 Druid 数据源时必须设置的。
- driverClassName:数据库驱动类名。
- url:数据库连接URL。
- username:数据库用户名。
- password:数据库密码。
- queryTimeout:连接获取到 statement 执行查询开始到查询执行结束的总时间不能超过该属性设置的值(秒),如果在规定的时间内未能得到结果,查询将被中止并抛出 TimeoutException 异常。
- socketTimeout:表示建立与数据库服务器之间的连接时等待服务器响应的超时时间(毫秒),即从发起请求到接收到响应的最长等待时间。在网络通信中,socketTimeout 可以设置为一个较大的值以避免连接超时问题,但是设置过大可能会导致系统响应变慢。
- connectTimeout:表示建立数据库连接时的超时时间,单位毫秒。
- 连接池大小相关属性:
- initialSize:初始化连接池时创建的连接数量。
- maxActive:连接池中最大的活动连接数。
- minIdle:连接池中最小的空闲连接数。
- maxIdle:连接池中最大的空闲连接数。
- maxWait:获取连接的最大等待时间,单位毫秒。
- 连接校验和保活相关属性:
这些属性是用于控制连接池大小和空闲连接回收等方面的。通过合理配置这些属性,可以确保连接池的性能和资源使用都得到优化。
- validationQuery:用于检测连接是否有效的SQL语句。
- validationQueryTimeout:表示连接验证查询的超时时间,单位为秒。
- testOnBorrow:借出连接时是否进行验证。
- testOnReturn:归还连接时是否进行验证。
- testWhileIdle:连接空闲时是否进行验证。
- timeBetweenEvictionRunsMillis:表示连接空闲状态检测的时间间隔,单位为毫秒。
- minEvictableIdleTimeMillis:最小空闲时间。如果连接池中空闲的连接数大于 minIdle(最小空闲连接数),并且那部分连接的空闲时间大于minEvictableIdleTimeMillis(最小空闲时间),则会关闭这些连接。
- removeAbandoned:是否自动回收废弃(超过时间范围未关闭)的连接。表示是否自动回收因长时间未关闭而废弃的连接,默认 false。
- removeAbandonedTimeout:废弃连接的回收时间,单位为秒。
- logAbandoned:是否对废弃连接进行日志记录,默认false。
- 监控和日志相关属性:
这些属性是用于连接池监控和统计等方面的。
- filters:配置连接池的拦截器,可以对连接进行过滤、扩展或者插入自定义逻辑。
- connectionProperties:连接属性,可以设置一些特殊的连接属性,如字符集等。
- poolPreparedStatements:是否缓存 PreparedStatement,默认不缓存。
- maxPoolPreparedStatementPerConnectionSize:缓存 PreparedStatement 的最大数目,负数表示不限制。
- useGlobalDataSourceStat:是否开启全局监控,默认开启。
springboot 中如何集成 配置druid?
要在 Spring Boot 项目中集成并配置 Druid 数据库连接池,你可以按照以下步骤进行操作:
- 首先,在 Maven 或 Gradle 中添加 Druid 和数据库驱动的依赖。例如,对于 Maven 项目,在 pom.xml 文件中添加如下依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<!-- 根据你使用的数据库选择对应的驱动,这里以 MySQL 为例 -->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
- 在 application.properties 或 application.yml 文件中配置 Druid 数据库连接池的相关属性。
# DataSource Configuration
spring:
datasource:
url: jdbc:mysql://localhost:3306/my_database
username: xxx
password: xxx
driver-class-name: com.mysql.cj.jdbc.Driver
# Druid Configuration
spring:
datasource:
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
validation-query: SELECT 'x'
test-on-borrow: false
test-on-return: false
test-while-idle: true
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
- 最后,在你的 Spring Boot 应用程序中,可以直接通过注解 @SpringBootApplication 或 @EnableAutoConfiguration 来启用自动配置。Druid 数据源将会自动创建并注入到应用程序中。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}