本文由 程序喵正在路上 原创,CSDN首发!
系列专栏:JavaWeb从入门到实战
首发时间:2022年9月2日
欢迎关注点赞收藏留言
一以贯之的努力 不得懈怠的人生
阅读指南
- 数据库连接池
-
- 1 - 概述
- 2 - 数据库连接池实现
- 3 - Driud使用
数据库连接池 1 - 概述 数据库连接池是什么
- 数据库连接池是一个容器,它负责分配、管理数据库连接
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
- 它会释放空闲时间超过最大空闲时间的数据库连接,以此来避免因为没有释放数据库连接而引起的数据库连接遗漏
- 资源重用
- 提升系统响应速度
- 避免数据库连接遗漏
而数据库使用了数据库连接池后,就能达到 Connection 对象的复用,如下图
文章图片
连接池是在一开始就创建好了一些连接(Connection)对象存储起来。用户需要连接数据库时,不需要自己创建连接,而只需要从连接池中获取一个连接进行使用,使用完毕后再将连接对象归还给连接池
这样就可以起到资源重用,也节省了频繁创建连接销毁连接所花费的时间,从而提升了系统响应的速度
2 - 数据库连接池实现 标准接口:DataSource
DataSource 是官方(SUN) 提供的数据库连接池标准接口,由第三方组织实现此接口,该接口提供了获取连接的功能:
Connection getConnection()
那么以后我们就不需要再通过 DriverManager 对象获取 Connection 对象,而是通过连接池获取 Connection 对象
常见的数据库连接池
- DBCP
- C3P0
- Druid
Druid(德鲁伊)
- Druid 连接池是阿里巴巴开源的数据库连接池项目
- 功能强大,性能优秀,是 Java 语言最好的数据库连接池之一
- 导入 jar 包 druid-1.1.12.jar
- 定义配置文件
- 加载配置文件
- 获取数据库连接池对象
- 获取连接
点击此处获取jar包
将 jar 包添加到 lib 下:
文章图片
添加为库文件,选择模块库:
文章图片
文章图片
在 src 下添加一个类:
文章图片
在 src 下新建一个配置文件 druid.properties,内容如下:
文章图片
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
关于配置文件的参数,还有很多,具体参考下表:
属性 | 说明 | 建议值 |
---|---|---|
url | 数据库的jdbc连接地址。一般为连接oracle/mysql。示例如下: | |
mysql : jdbc:mysql://ip:port/dbname?option1&option2&… | ||
oracle : jdbc:oracle:thin:@ip:port:oracle_sid | ||
username | 登录数据库的用户名 | |
password | 登录数据库的用户密码 | |
initialSize | 启动程序时,在连接池中初始化多少个连接 | 10-50已足够 |
maxActive | 连接池中最多支持多少个活动会话 | |
maxWait | 程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池 | 100 |
没有可用连接,单位毫秒,设置-1时表示无限等待 | ||
minEvictableIdleTimeMillis | 池中某个连接的空闲时长达到 N 毫秒后, 连接池在下次检查空闲连接时,将 | 见说明部分 |
回收该连接,要小于防火墙超时设置 | ||
net.netfilter.nf_conntrack_tcp_timeout_established的设置 | ||
timeBetweenEvictionRunsMillis | 检查空闲连接的频率,单位毫秒, 非正整数时表示不进行检查 | |
keepAlive | 程序没有close连接且空闲时长超过 minEvictableIdleTimeMillis,则会执 | true |
行validationQuery指定的SQL,以保证该程序连接不会池kill掉,其范围不超 | ||
过minIdle指定的连接个数。 | ||
minIdle | 回收空闲连接时,将保证至少有minIdle个连接. | 与initialSize相同 |
removeAbandoned | 要求程序从池中get到连接后, N 秒后必须close,否则druid 会强制回收该 | false,当发现程序有未 |
连接,不管该连接中是活动还是空闲, 以防止进程不会进行close而霸占连接。 | 正常close连接时设置为true | |
removeAbandonedTimeout | 设置druid 强制回收连接的时限,当程序从池中get到连接开始算起,超过此 | 应大于业务运行最长时间 |
值后,druid将强制回收该连接,单位秒。 | ||
logAbandoned | 当druid强制回收连接后,是否将stack trace 记录到日志中 | true |
testWhileIdle | 当程序请求连接,池在分配连接时,是否先检查该连接是否有效。(高效) | true |
validationQuery | 检查池中的连接是否仍可用的 SQL 语句,drui会连接到数据库执行该SQL, 如果 | |
正常返回,则表示连接可用,否则表示连接不可用 | ||
testOnBorrow | 程序 申请 连接时,进行连接有效性检查(低效,影响性能) | false |
testOnReturn | 程序 返还 连接时,进行连接有效性检查(低效,影响性能) | false |
poolPreparedStatements | 缓存通过以下两个方法发起的SQL: | true |
public PreparedStatement prepareStatement(String sql) | ||
public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) | ||
maxPoolPrepareStatementPerConnectionSize | 每个连接最多缓存多少个SQL | 20 |
filters | 这里配置的是插件,常用的插件有: | stat,wall,slf4j |
监控统计: filter:stat | ||
日志监控: filter:log4j 或者 slf4j | ||
防御SQL注入: filter:wall | ||
connectProperties | 连接属性。比如设置一些连接池统计方面的配置。 | |
druid.stat.mergeSql=true; druid.stat.slowSqlMillis=5000 | ||
比如设置一些数据库连接属性 |
/**
* Druid数据库连接池演示
*/
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo {
public static void main(String[] args) throws Exception {
//1.导入jar包
//2.定义配置文件//3. 加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc_demo/src/druid.properties"));
//4. 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5. 获取数据库连接 Connection
Connection connection = dataSource.getConnection();
System.out.println(connection);
//获取到了连接后就可以继续做其他操作了
}
}
【JavaWeb从入门到实战|【JavaWeb】数据库连接池】
文章图片
推荐阅读
- 安全工具|cobalt strike 的基础使用
- SpringBoot|SpringBoot 如何集成 MyBatisPlus - SpringBoot 2.7.2实战基础
- SpringBoot|SpringBoot集成MyBatisPlus生成代码和操作
- spring|全栈开发之后端脚手架(SpringBoot 集成 MybatisPlus 代码生成,分页)
- SpringBoot|SpringBoot笔记(SpringBoot集成MyBatisPlus实战)
- Mybatis|SpringBoot整合Mybatisplus
- Springboot集成MybatisPlus、Druid
- java|SpringBoot+MyBatisPlus
- 微服务|Springboot集成Mybatisplus,轻松CRUD