1、为何要使用连接池:
使用连接池的主要目的是提高程序的性能和响应速度,同时减少资源的开销;连接池可以在应用程序启动时就创建好一定数量的数据库连接,这些连接可以被复用来执行多个查询或更新操作;
连接池会自动帮助应用程序管理连接的生命周期,避免了频繁的开启和关闭连接的开销,减少了连接的创建时间以及数据库的资源开销。
另外,连接池还可以帮助应用程序维持可伸缩性,即在高负荷的情况下,可以根据需要增加或减少连接数,以确保性能和可靠性。
不使用连接池造成的缺点:
(1)不使用数据库连接池,每次都通过DriverManager获取新连接,用完直接抛弃断开, 连接的利用率太低,太浪费。
(2)对于数据库服务器来说,压力太大了。我们数据库服务器和Java程序对连接数也无法控制 ,很容易导致数据库服务器崩溃。
使用连接池:
我们可以建立一个连接池,这个池中可以容纳一定数量的连接对象,一开始, 我们可以先替用户先创建好一些连接对象,等用户要拿连接对象时,就直接从池中拿, 不用新建了,这样也可以节省时间。然后用户用完后,放回去,别人可以接着用。
可以提高连接的使用率。当池中的现有的连接都用完了,那么连接池可以向服务器申 请新的连接放到池中。
直到池中的连接达到“最大连接数”,就不能在申请新的连接了,如果没有拿到连接的用户只能等待。
2、为何选择Druid连接池
JDBC 的数据库连接池使用 javax.sql.DataSource接口进行规范,所有的第三方连接池都实现此接口,自行添加具体实现!也就是说,所有连接池获取连接的和回收连接方法都一样,不同的只有性能和扩展功能!
1、DBCP 是Apache提供的数据库连接池,速度相对c3p0较快,但因自身存在BUG
2、C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以
3、Proxool 是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能, 稳定性较c3p0差一点
4、Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool 优点于一身的数据库连接池,妥妥国货之光!!!!
3、Druid软编码方式:
3.1、外部配置文件
在src目录下创建一个:druid.properties文件
# key = value => java Properties读取(key | value)
# druid配置的key固定命名
# druid连接池需要的配置参数,key的命名是固定的
* 必须参数: 账号 username
* 密码 password
* url
* driverClassName
* 非必须参数:
* 初始化个数
* 最大数量等等 目前不推荐设置
driverClassName=com.mysql.cj.jdbc.Driver
username=root
password=mysql
url=jdbc:mysql://localhost:3306/jdbc_study
3.2、软编码代码
/**
* 软编码方式
* 通过读取外部配置文件的方法,实现druid连接池对象
*/
public class DruidUsePart {
@Test
public void softtest() throws Exception {
//1.读取外部配置文件 到Properties对象中
Properties properties = new Properties();
//src下的文件,可以使用类加载器提供的方法
/**
* TODO:
* DruidUsePart.class 当前类
* getClassLoader() 获取当前类的类加载器
* getResourceAsStream() 读取文件
*/
//创建输入流
InputStream ips = DruidUsePart.class.getClassLoader()
.getResourceAsStream("druid.properties");
//将输入流(外部配置文件)读入Properties对象中
properties.load(ips);
//2.使用连接池的工具类的工程模式,创建连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
//数据库的CURD操作
//回收连接
connection.close();
}
}
当中重点:都是
简单步骤:
1.创建Properties对象;2.创建输入流,用类加载器提供的方法;3.将输入流读入到properties对象中;
4.使用连接池工程模式,创建连接池;5.获取连接
//1.创建Properties对象
Properties properties = new Properties();
//2.创建输入流,用类加载器提供的方法
InputStream ips = JdbcUtils.class.getClassLoader()
.getResourceAsStream("jdbc.properties");
//3.将输入流读入到properties对象中
properties.load(ips);
//4.使用连接池工程模式,创建连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//5.获取连接
Connection connection = dataSource.getConnection();
load(InputStream in):从指定的输入流中加载属性列表,对应的文件应该是 Properties 文件格式,可以是 XML 格式。