连接池:
频繁的数据连接操作势必占用很多的系统资源,相应速度必定下降,程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库,系统资源被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。
连接池为数据库建立一个“缓冲池”,预先在缓冲区中放入一定数量的连接,当需要数据库连接时,只需从”缓冲池“中取出一个,使用完毕后在放回去,通过设定连接池最大连接数来防止系统无休止的数据连接。更为重要的是可以通过连接池的管理机制监视数据库的连接数量,使用情况。为系统开发、测试、性能调整提供依据。
工作流程:
如果没有空闲连接,则检查当前所开连接池是否达到允许的最大连接数,如果没有就新建一个连接,如果达到,就等待一定时间,如果在等待时间内有连接释放,就可以把这个连接分配给等待的用户。如果等待时间超过还没有连接释放,则返回null
持久层BaseDao
package com.lovo.dao.impl;
import java.io.File;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
public class BaseDao {
protected Connection con;
protected PreparedStatement ps;
protected ResultSet rs;
//创建连接池对象
private static BasicDataSource dbs = new BasicDataSource();
//将连接数据库的信息放在了source/connection.txt中
static{
File file = new File("source");
if(!file.exists()){//如果目录不存在创建目录
file.mkdir();
}
Properties pro = new Properties();
try {
//加载文件
pro.load(new FileReader("source/connection.txt"));
} catch (Exception e) {
e.printStackTrace();
}
//设置要加载的驱动类
dbs.setDriverClassName(pro.getProperty("driver"));
//连接数据库的url
dbs.setUrl(pro.getProperty("url"));
//数据库用户名
dbs.setUsername(pro.getProperty("userName"));
//数据库密码
dbs.setPassword(pro.getProperty("passWord"));
//最大连接数
dbs.setMaxActive(50);
//最小连接数
dbs.setMaxIdle(20);
//等待时间,一毫秒为单位
dbs.setMaxWait(1000);
}
/**
* 得到连接
*/
public void getConnection(){
try {
this.con = dbs.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 关闭连接
*/
public void close(){
try {
if (rs!=null) {
this.rs.close();
}
if (ps!=null) {
this.ps.close();
}
if (con!=null) {
this.con.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}