连接池:
背景:每次执行对db的CRUD操作时,每次都建立数据库的连接,使用完毕之后都要断开连接(connection.close)释放资源。如此倘若有多用户对db频繁的操作,则每次都要建立连接,是非常消耗资源的,也是减低对db访问的效率。
类似于同时一万人去一家饭店去吃饭,根本照顾不过来,老板要疯。
其实在开发的过程中,db会单独放在一台或者多台电脑上,这样的电脑就是数据库服务器。
作用:
为了减轻db的一些压力,我们可以使用数据库连接池技术。
意义:
连接池:存放了多个连接。将来application就可以直接访问连接池,再有连接池去访问db。也就是说,我们用户不需要关心和管理连接,由连接池来管理。如此就达到了提高访问db的效率。
使用c3p0,dbcp等
1 导包
1.1下载
https://sourceforge.net/projects/c3p0/
1.2选择两个jar包
1.3 加入到工程中,并add build path
2 配置
2.1连接池的配置
中存放的都是连接,比如最大连接数,最小连接数,这些都要进行配置。这里配置连接池的属性。
2.2 DataSource 数据源
指的是数据的源头(mysql oracle。。。。或者其他的db)的配置,比如用户名,密码,url等
2.3 写配置文件
一般情况下,使用一个xml文件来完成配置。注意:对于c3p0的配置文件,名字必须为c3p0-config.xml。
configuration
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- c3p0默认配置 配置多个数据源(数据库的连接) -->
<default-config>
<!-- 1 先配置DataSource -->
<!-- driverClass url user password -->
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/laosun?serverTimezone=GMT%2B8</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 2 配置pool 举了3个例子,其他的不设置的情况下,都使用默认的设置-->
<!-- 初始化时 pool中获取的连接数 -->
<property name="initialPoolSize">5</property>
<!-- pool保留最大连接数 -->
<property name="maxPoolSize">50</property>
<!-- 最大空闲时间 多少秒内未使用则将连接丢弃,如果设置0,代表永不丢弃,默认值是0-->
<property name="maxIdleTime">1000</property>
</default-config>
</c3p0-config>
C3p0只是对连接进行了优化而已。
在使用上,和之前的差不多,只不过连接时发生变化:
// 早先获取连接的方式:
// DriverManager.getConnection(url)
// 现在使用pool获取连接:
// 使用默认的构造,会自动加载名为c3p0-config.xml文件,进行配置
ComboPooledDataSource dataSource = new ComboPooledDataSource();
Connection connection = dataSource.getConnection();
// 以下的代码流程都一样。
// connection.prepareStatement(sql);