在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:
- 在主程序建立数据库连接
- 进行sql操作
- 断开数据库连接
这种模式,存在以下问题:
- 每次连接数据库需要建立连接,执行完再断开连接,会消耗大量的资源和时间,数据库的连接资源并没有得到很好的重复利用。
- 对于每一次数据库连接,使用完都得断开。否则,如果程序出现异常为关闭,将导致数据库系统内存泄漏。
- 这种开发不能控制被创建的连接对象数,系统资源会被毫不顾忌的分配出去。
一、数据库连接技术
- 为解决传统开发数据库连接问题,可采用连接池技术
- 基本思想:为数据库连接建立一个“缓冲池”,预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从缓冲池中取出一个,使用完再放回去。
- 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
- 数据库连接的数量由最小数据库连接数设定,最大数据库连接数量限定能占有的最大连接数,最大最小连接数在连接数据库时设定,当请求连接数超过最大连接数量,这些请求将被加入到等待队列中。

二、Druid(德鲁伊)
数据库连接池开源组织实现有很多,这里使用Druid,也是开发中常用的一种;
Druid是阿里提供的数据库连接池,集DBCP、C3P0、Proxool优点于一身的数据库连接池;
下面使用idea+mysql8实现。
代码实现
1、加载驱动
将驱动文件复制到lib文件下并添加为库。
![]()
![]()
2、创建配置文件druid.properties
封装连接数据库的基本信息
url=jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
username=root
password=ad
driverClassName=com.mysql.cj.jdbc.Driver
initialSize=7
maxActive=10
详细配置参数
| 配置 | 说明 |
| name | 如果存在多个数据源,监控的时候可以通过名字区分,如果没有配置,会生成一个名字,格式:“DataSource”+System.identityHashCode(this) |
| url | 连接数据库的url |
| username | 连接数据库的用户名 |
| password | 连接数据库的密码 |
| driverClassName |
可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下) |
| initialSize | 初始化时建立物理连接的个数 |
| maxActive | 最大连接池数量 |
3、连接数据库
方式一
public static void getConnection() throws Exception{
Properties pros = new Properties();
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
pros.load(is);
DataSource source = DruidDataSourceFactory.createDataSource(pros);
Connection conn = source.getConnection();
System.out.println(conn);
}
方式二(优化)
创建JDBCUtils类
用于封装连接数据库方法
/**Druid数据库连接池技术*/
private static DataSource source;
static {
try {
Properties pros = new Properties();
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
pros.load(is);
source = DruidDataSourceFactory.createDataSource(pros);
}catch (Exception e){
e.printStackTrace();
}
}
public static Connection getConnection1() throws SQLException{
Connection conn = source.getConnection();
return conn;
}
4、测试
/**使用druid连接池*/
void getCustomerById() {
Connection conn = null;
try {
conn = JDBCUtils.getConnection1();
Customer cust = dao.getCustomerById(conn,19);
System.out.println(cust);
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtils.closeResource(conn,null);
}
}
使用Druid数据库连接池优化Web程序开发
本文介绍了在开发基于数据库的Web程序时,传统数据库连接模式存在的资源浪费和管理不便问题,并提出了解决方案——使用数据库连接池技术。重点讲解了Druid连接池的原理和优势,如预先建立连接池、重复使用连接以及设置最大和最小连接数等特性。同时,提供了在IDEA中结合MySQL8实现Druid连接池的步骤,包括配置属性文件、加载驱动、创建数据库连接以及使用JDBCUtils进行优化。最后展示了如何在实际代码中应用Druid连接池来获取和管理数据库连接。
1874

被折叠的 条评论
为什么被折叠?



