DBCP连接介绍
DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp2-2.11.0.jar
,commons-logging-1.3.0.jar
,commons-pool2-2.12.0.jar
,由于建立传统数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。Tomcat通过JAR包tomcat-dbcp.jar集成了连接池DBCP的功能,通过在context.xml中配置连接池的方式引入DBCP连接池,也可以在server.xml文件中配置全局的连接池。
DBCP jar包下载
需要jar包以及版本,MySql版本一定要与本地电脑的版本一致:
mysql-connector-j-8.0.33.jar
commons-dbcp2-2.11.0.jar
commons-logging-1.3.0.jar
commons-pool2-2.12.0.jar
一、DBCP jar官网下载路径如下:
二、下载好 DBCP的jar包
三、将下载好的 jar 包导入到idea项目里面去
1、根据个人需要将 commons-logging-1.3.0.jar
和 commons-pool2-2.12.0.jar
和 commons-dbcp2-2.11.0.jar
jar包文件复制到项目的 lib 路径下。
2、将lib文件夹 “添加为库” 或 将添加的jar包 “添加为库”(必要操作)
DBCP配置及使用(这里以MySql数据库演示)
一、DBCP配置及使用(使用配置文件初始化连接池配置)
1、properties配置文件
我用的是配置 文件名.properties
文件的方式,文件名随意。在项目的 src 目录下新建就行。:
配置文件内容:
#不多解释,这是基本的驱动加载
DriverClassName=com.mysql.cj.jdbc.Driver
#驱动注册
url=jdbc:mysql://localhost:3306/20231124db
#要连接的数据库用户名
username=root
#要连接的数据库密码
password=sasa
#设置是否自动提交,默认为true
defaultAutoCommit=true
#是否为只读 默认为false
defaultReadOnly=false
#初始化数据池拥有的连接数量
initialSize=10
#池中最多可容纳的活着的连接数量,当达到这个数量不在创建连接
maxActive=20
#最大空闲等待,也就是连接等待队列超过这个值会自动回收未使用的连接,直到达到20
maxIdle=20
#最小空闲等待 ,数据池中最少保持的连接
minIdle=5
#最大等待时间,超过这个时间等待队列中的连接就会失效
maxWait=10000
#从池中取出连接时完成校验 ,验证不通过销毁这个connection,默认为true,
testOnBorrow=true
#放入池中时完成校验,默认我fasle
testOnReturn=false
#校验语句,必须是查询语句,至少查询一列,设置了它onBorrow才会生效
validationQuery=select 1
#校验查询时长,如果超过,认为校验失败
validationQueryTimeout=1
#清除一个连接时是否需要校验
testWhileIdle=false
#DBCP默认有个回收器Eviction,这个为设置他的回收时间周期
timeBetweenEvictionRunsMillis=1
#Eviction在运行时一次处理几个连接
numTestsPerEvictionRun=3
#是否缓存PreparedStatements
poolPreparedStatements=true
#缓存PreparedStatements的最大个数
maxOpenPreparedStatements=1
2、连接MySql数据库操作
public static void main(String[] args) {
try {
//加载数据库连接池配置
Properties properties = new Properties();
properties.load(Main.class.getClassLoader().getResourceAsStream("database.properties"));
//创建BasicDataSource数据源
BasicDataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
//从数据源获取连接,并且进行sql语句查询
ResultSet rs = dataSource.getConnection().prepareStatement("SELECT COUNT(0) FROM 20231124DB.depttab").executeQuery();
//判断是否成功获取到连接
if (rs.next()) {
System.out.println("连接成功");
} else {
System.out.println("连接失败");
}
//释放连接到连接池
rs.close();
}catch (Exception e){
System.out.println(e.getMessage());
}
}
运行结果:
二、HikariCP 配置及使用(使用代码来初始化连接池配置)
1、连接MySql数据库操作
public static void main(String[] args) throws SQLException {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/20231124db");
dataSource.setUsername("root");
dataSource.setPassword("sasa");
dataSource.setInitialSize(10);
dataSource.setMaxTotal(20);
dataSource.setMaxIdle(5);
dataSource.setMinIdle(2);
ResultSet rs = dataSource.getConnection().prepareStatement("SELECT COUNT(0) FROM 20231124DB.depttab").executeQuery();
if (rs.next()) {
System.out.println("连接成功");
} else {
System.out.println("连接失败");
}
rs.close();
}
运行结果: