- 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:
1>在主程序中建立数据库连接
2>进行sql操作
3>断开数据库连接
- 数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
- 数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
- 数据库连接池的优点:资源重用,更快的系统反应速度,新的资源分配手段,统一的连接管理,避免数据库连接泄露
二种开源的数据库连接池:
- DBCP的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由服务器(Weblogic,WebSphere,Tomcat)提供实现,也有一些开源组织提供实现:
-DBCP数据库连接池
-C3PO数据库连接池
- DataSource通常被称为数据源,它包含连接池和连接管理二个部分,习惯上也经常把DataSource称为连接池。
DBCP数据源:DBCP是Apache软件基金组织下的开源连接池实现,该连接池依赖该组织下的另一个开源系统:Common-pool如需使用该连接池实现,应在系统中增加如下二个jar文件:
-Commons-dbcp.jar :连接池的实现
-Commons-pool.jar :连接池实现的依赖
Tomcat的连接池正是采用该连接池实现的,该数据库连接池既可以与应用服务器整合使用,也可以由应用程序独立使用。
//使用数据库连接池
/*
* 1.加入jar包,依赖于pool这个包
* 2.创建数据库连接池
* 3.为数据源实例指定必须的属性
* 4.从数据源中获取数据库链接
* */
//1.创建DBPC数据源实例
DataSource dataSource = new BasicDataSource();
//2.为数据源实例指定必须的属性
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setUrl("jdbc:mysql///books");
dataSource.setDriverClassNae("com.mysql.jdbc.cj.java");
//3.指定数据源的一些可选的属性
dataSource.setInitialSize(10);//指定数据库连接池中初始化连接数的个数
dataSource.setMaxActive(50);//指定最大的连接数:同一时刻可以同时向数据库申请的连接数
dataSource.setMinIdle(5);//指定最小连接数,在数据库空闲状态下,保存的最少空闲链接的数量
dataSource.setMaxWaiter(1000*5);//等待数据库连接池分配连接的最长时间
//4.从数据源中获取数据库连接
Connection connection =JdbcTool.getConnection();
使用配置文件:
//1.加载dbcp.properties配置文件,配置文件来自于 BasicDateSource的属性
//2.调用BasicDateSourceFactory的createDataSource(properties)方法
//3.从 DataSource实例中获取数据库连接
Properties properties = new Properties();
InputStream inputStream =JdbcTool.class.getClassLoader().getResourceAsStream("dbcp.properties");
properties.load(inStream);
DataSource dataSource = BasicDateSourceFactory.createDataSource(properties);
System.out.println(dataSource.getConnection());
dbcp.properties:
username=root
password=root
driverClassname = com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/books?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
initialSize=10
maxActive=50
minIdle=5
maxWait=5000