池的概念以及数据库连接池 Druid
1.池的概述
池就相当于一个共享资源,是对资源的整合和调配,节省存储空间,当需要的时候可以直接在池中取,用完之后再还回去。
为什么需要连接池
假如没有连接池,我们操作数据库的流程如下:
- 应用程序使用数据库驱动建立和数据库的 TCP 连接 ;
- 用户进行身份验证 ;
- 身份验证通过,应用进行读写数据库操作 ;
- 操作结束后,关闭 TCP 连接 。
连接池是一个存放数据库连接对象的集合,应用程序在启动时会创建多个数据库连接对象,并将它们放入连接池中。当有客户端请求到达时,应用程序会从连接池中获取一个连接对象来为客户端提供服务。请求处理完成后,客户端会通过调用关闭方法将连接对象归还给连接池。这种设计可以有效地管理数据库连接的分配和释放,提高系统的性能和资源利用率。
JDBC连接池是一种常见的数据库连接管理方式,通过预先创建一组数据库连接对象并放入池中,以供应用程序随时使用。相比于直接频繁创建连接的方式,使用连接池可以提高效率和性能。
以下是使用JDBC连接池的一般流程:
- 获取数据源对象:通常使用标准的数据源接口
javax.sql.DataSource
,其中定义了获取数据库连接的方法。 - 从数据源获取连接:通过调用
getConnection()
方法获取数据库连接对象。 - 执行SQL操作:使用获取到的连接对象执行SQL查询或更新操作。
- 处理查询结果:对查询结果进行处理,例如遍历结果集并提取数据。
- 关闭资源:在完成操作后,需要关闭ResultSet、PreparedStatement和Connection等资源,以释放数据库连接和避免资源泄漏。
常见的JDBC连接池包括HikariCP、C3P0和Druid等。其中,Druid是阿里巴巴开源的数据库连接池库,提供了丰富的连接池管理和监控功能,因此在实际应用中也得到了广泛的应用。
1、配置Druid数据源
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
dataSource.setUsername("yourusername");
dataSource.setPassword("yourpassword");
dataSource.setInitialSize(5); // 初始连接池大小
dataSource.setMinIdle(5); // 最小空闲连接数
dataSource.setMaxActive(20); // 最大活动连接数
dataSource.setValidationQuery("select 1 from dual"); // 心跳的 Query
dataSource.setMaxWait(60000); // 最大等待时间
dataSource.setTestOnBorrow(true); // 验证连接是否有效
2、使用数据库连接
Connection connection = dataSource.getConnection();
//使用连接执行数据库操作
// TODO 业务操作
// 使用后关闭连接连接
connection.close();
3、关闭数据源
dataSource.close();