springboot框架中可以使用druid进行数据库连接池,下面介绍druid在springboot中使用和参数配置介绍。
数据库连接池(Druid)是一种用于管理数据库连接的机制,其工作原理和常见使用方法如下:
- 原理:数据库连接池通过预先建立一定数量的数据库连接,并在程序需要时重复使用这些已存在的连接,而不是每次都新建一个,从而避免了频繁创建和销毁数据库连接带来的开销。这种技术可以显著提高系统的响应速度并减少资源消耗。连接池中的连接数量通常由最大连接数和最小连接数来控制,以达到最佳的性能和资源利用率。
- 使用步骤:
- 定义配置文件:首先,需要定义Druid的配置文件,例如
druid.properties
,在其中配置数据库的相关信息,如URL、用户名、密码等。 - 编程实例:在代码中实例化Druid数据源,然后通过这个数据源获取数据库连接。
- 自定义JDBC工具类:创建一个工具类来封装数据库连接的获取和释放操作,以便在程序中重复使用。
- 配置参数:Druid连接池提供了丰富的配置参数,包括最大连接数、最小连接数、空闲连接的保持时间等,以便根据实际需求进行优化。
- 常见问题:在使用过程中,可能遇到一些问题,如连接泄漏、SQL注入等,需要注意防范和解决。
总之,数据库连接池技术是提高系统性能和资源利用率的重要手段,Druid作为其中的一种实现,提供了丰富的功能和灵活的配置选项。在使用过程中,需要注意配置和优化,并根据具体情况选择合适的连接池大小和保持策略。
在springboot中的使用
1、maven中引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
2、druid配置项和解析
spring:
datasource:
druid:
# 指定数据源类型为DruidDataSource
type: com.alibaba.druid.pool.DruidDataSource
# 数据库连接URL
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
# 数据库用户名
username: root
# 数据库密码
password: "xx123!@#"
# 连接池初始化时创建的连接数
initialSize: 5
# 连接池中最大连接数
maxActive: 50
# 连接池中最小空闲连接数
minIdle: 5
# 连接池中最大空闲连接数
maxIdle: 10
# 获取连接时的最大等待时间(毫秒)
maxWait: 60000
# 间隔多久检测一次空闲连接(毫秒)
timeBetweenEvictionRunsMillis: 60000
# 连接池中连接最小空闲时间(毫秒)
minEvictableIdleTimeMillis: 300000
# 用于检测连接是否有效的SQL语句
validationQuery: SELECT 1
# 是否开启空闲连接的检测
testWhileIdle: true
# 是否开启连接的检测功能,在获取连接时检测连接是否有效
testOnBorrow: false
# 是否开启连接的检测功能,在归还连接时检测连接是否有效
testOnReturn: false
# 是否缓存PreparedStatement对象
poolPreparedStatements: true
# 缓存PreparedStatement对象的最大数量
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计用的filter,允许监控统计
filters: stat
# 配置扩展属性,用于监控统计分析SQL性能等
2、url: 数据库连接的URL。
注意事项:需要根据实际情况修改URL。
3、username: 数据库用户名。
4、password: 数据库密码
包含一些特殊字符的时候需要加引号。
5、initialSize: 连接池初始化时创建的连接数。
需要根据实际情况设置连接数。连接池创建连接时,会创建initialSize个连接,以确保应用程序在启动时可以立即获取到数据库连接。
6. maxActive: 连接池中最大连接数。需要根据实际情况设置最大连接数。如果连接池中连接数达到maxActive,则应用程序获取连接的请求将被阻塞,直到有连接被释放。
7. minIdle: 连接池中最小空闲连接数。 需要根据实际情况设置最小空闲连接数。如果连接池中空闲连接数少于minIdle,连接池会创建新的连接以达到minIdle。
8. maxIdle: 连接池中最大空闲连接数。 需要根据实际情况设置最大空闲连接数。如果连接池中空闲连接数超过maxIdle,连接池会关闭多余的连接以避免占用过多的资源。
9. maxWait: 获取连接时的最大等待时间。需要根据实际情况设置最大等待时间。如果连接池中没有可用连接且已经达到最大连接数,则应用程序获取连接的请求将被阻塞,最多等待maxWait毫秒。
10. timeBetweenEvictionRunsMillis: 间隔多久检测一次空闲连接(毫秒)。 需要根据实际情况设置检测间隔时间。连接池会定期检查空闲连接的状态,如果空闲时间超过minEvictableIdleTimeMillis,则将连接关闭。
11. minEvictableIdleTimeMillis: 连接池中连接最小空闲时间(毫秒)。 需要根据实际情况设置最小空闲时间。连接池会定期检查空闲连接的状态,如果空闲时间超过minEvictableIdleTimeMillis,则将连接关闭。
12. validationQuery: 用于检测连接是否有效的SQL语句。 需要根据实际情况设置SQL语句。连接池会使用这个SQL语句来检测连接是否有效。
13. testWhileIdle: 是否开启空闲连接的检测。 需要根据实际情况设置是否开启空闲连接的检测。如果开启,连接池会定期检查空闲连接的状态。
14. testOnBorrow: 是否开启连接的检测功能,在获取连接时检测连接是否有效。
需要根据实际情况设置是否开启连接的检测功能。如果开启,连接池在获取连接时会检查连接是否有效。
15. testOnReturn: 是否开启连接的检测功能,在归还连接时检测连接是否有效。 需要根据实际情况设置是否开启连接的检测功能。如果开启,连接池在归还连接时会检查连接是否有效。
16. poolPreparedStatements: 是否缓存PreparedStatement对象。需要根据实际情况设置是否缓存PreparedStatement对象。如果开启,连接池会缓存PreparedStatement对象以提高性能。
17. maxPoolPreparedStatementPerConnectionSize: 缓存PreparedStatement对象的最大数量。 需要根据实际情况设置缓存的最大数量。如果开启了缓存PreparedStatement对象,连接池会限制每个连接缓存的最大数量。
maxPoolPreparedStatementPerConnectionSize是Druid连接池的一个配置项,用于配置连接池中缓存的PreparedStatement的最大数量。PreparedStatement是预编译的SQL语句,可以提高SQL执行的效率和安全性,避免SQL注入等安全问题。在使用Druid连接池时,当开启了缓存PreparedStatement功能时,每个连接都会缓存一定数量的PreparedStatement对象,以便在需要执行SQL语句时能够快速获取。而maxPoolPreparedStatementPerConnectionSize就是用于配置每个连接中缓存的PreparedStatement的最大数量。需要注意的是,缓存PreparedStatement虽然可以提高SQL执行的效率,但同时也会占用一定的内存资源。因此,需要根据实际情况进行合理配置。默认情况下,该属性的值为10。在上面的配置中,maxPoolPreparedStatementPerConnectionSize: 20表示将每个连接中缓存的PreparedStatement的最大数量设置为20个。
18. filters: 配置监控统计用的filter,允许监控统计。 如果要使用Druid的监控功能,需要配置此项。stat表示使用Druid的监控功能。
19. connectionProperties: 配置扩展属性,用于监控统计分析SQL性能等。 druid.stat.mergeSql和druid.stat.slowSqlMillis是两个与SQL监控有关的属性。
druid.stat.mergeSql用于配置是否合并SQL。当该属性设置为true时,Druid会将相同的SQL语句合并为一条,以节省SQL统计的开销和提高统计精度。默认情况下,该属性的值为false。
druid.stat.slowSqlMillis用于配置SQL执行的时间阈值,单位为毫秒。当一条SQL执行的时间超过该阈值时,Druid会将该SQL记录到慢SQL列表中,以便进行分析和优化。默认情况下,该属性的值为3000毫秒。