JDBC------数据库连接池笔记
前言
池化技术:准备一些预先的资源,过来就连接预先准备好的
1、最小连接数:如果常用的连接数是10的话,那最小连接数一般也设置为10。
2、最大连接数:业务最高承载上限(不是并发?),超过了最大连接数就排队等待。
3、等待超时:如果排队时间超过某个值,就不再等待。
编写连接池,实现一个数据源接口 DataSource,里面自带连接。
一、开源的数据源实现
DBCP
C3P0
Druid:阿里巴巴
使用了这些数据库连接池之后,我们在项目开发中就不需要编写连接数据库的代码了!
二、DBCP
jar包:
- commons-collections
- commons-dbcp2
- commons-logging
- commons-pool2
- mysql-connector
配置模板:
#连接设置
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcstudy?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true
username=root
password=123
#初始化池大小,即一开始池中就会有10个连接对象
initialSize=10
#最大连接数,如果设置为非正数,表示没有限制!即无限大
maxActive=50
#最大空闲连接,如果设置为负数,表示没有限制!即无限大
maxIdle=20
#最小空闲连接
minIdle=5
#最大等待时间(ms),默认值为-1,表示无限期等待,不会抛出异常。
maxWait=60000
#连接属性
#就是原来放在url后面的参数,可以使用connectionProperties来指定
#如果已经在url后面指定了,那么就不用在这里指定了。
#useServerPrepStmts=true,MySQL开启预编译功能
#cachePrepStmts=true,MySQL开启缓存PreparedStatement功能,
#prepStmtCacheSize=50,缓存PreparedStatement的上限
#prepStmtCacheSqlLimit=300,当SQL模板长度大于300时,就不再缓存它
connectionProperties=useUnicode=true;characterEncoding=UTF8;
#连接的默认提交方式
#默认值为true
defaultAutoCommit=true
#连接是否为只读连接
#Connection有一对方法:setReadOnly(boolean)和isReadOnly()
#如果是只读连接,那么你只能用这个连接来做查询
#指定连接为只读是为了优化!这个优化与并发事务相关!
#如果两个并发事务,对同一行记录做增、删、改操作,是不是一定要隔离它们啊?
#如果两个并发事务,对同一行记录只做查询操作,那么是不是就不用隔离它们了?
#如果没有指定这个属性值,那么是否为只读连接,这就由驱动自己来决定了。即Connection的实现类自己来决定!
defaultReadOnly=
#指定事务的事务隔离级别
#可选值:NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
#如果没有指定,那么由驱动中的Connection实现类自己来决定
defaultTransactionIsolation=READ_UNCOMMITTED
三、C3P0
jar包:
- c3p0-0.9.5.2
- mchange-commons-java-0.2.15
- mysql-connector-java-8.0.11
配置模板:
<?xml version="1.0" encoding="UTF-8"?>