什么事Java连接池?
程序开发过程中,存在很多问题:
首先,每一次web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。
可是对于现在的web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库
通过上面的分析,我们可以看出来,“数据库连接”是一种稀缺的资源,为了保障网站的正常使用,应该对其进行妥善管理。其实我们查询完数据库后,如果不关闭连接,而是暂时存放起来,当别人使用时,把这个连接给他们使用。就避免了一次建立数据库连接和断开的操作时间消耗。
数据库连接池的基本思想:就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接
实现代码: 第一种 用硬连接 使用DBCP
//以DBCP的方式实现连接池
public class DbcpTest {
@Test
public void test() throws Exception {
// DBCP连接池的核心类
BasicDataSource dataSource = new BasicDataSource();
// 进行DBCP连接池的相关配置
dataSource.setUrl(“jdbc:mysql://localhost:3306/test”);
dataSource.setDriverClassName(“com.mysql.jdbc.Driver”);
dataSource.setUsername(“root”);
dataSource.setPassword(“root”);
// 初始化连接(集合包含连接的个数)
dataSource.setInitialSize(3);
// 连接池承受最大的限度
dataSource.setMaxActive(6);
// 连接池最大的空闲时间
dataSource.setMaxIdle(3000);
// 获取到Connection连接
Connection con = dataSource.getConnection();
// 发送SQL连接
con.prepareStatement("delete from admin where id=3").executeUpdate();
con.close();
}
第二种使用配置文件来 使用DBCP
// 加载配置文件的配置线性池
@Test
public void testDbpc() throws Exception {
//加载prop配置文件
Properties prop=new Properties();
//获取文件的流
InputStream inStream=DbcpTest.class.getResourceAsStream("db.properties");
//加载属性配置文件
prop.load(inStream);
//根据配置文件直接配置线性池的属性
DataSource dataSouce = BasicDataSourceFactory.createDataSource(prop);
Connection con = dataSouce.getConnection();
// 发送SQL连接
con.prepareStatement("delete from admin where id=3").executeUpdate();
con.close();
}
db.properties配置文件
![db.properties](https://img-blog.csdn.net/20180102200239737?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvR2Vla1RlYW1YaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)