我们为什么需要连接池?
在JDBC获取连接对象Connection的这一步骤当中,是非常消耗资源的,如果每交互一次就获取一个连接对象,交互完成后立马关闭对象,这样的设计明显非常低效。所以我们一般使用连接池的方式管理连接对象。
连接池的设计与JDBC一致,是由SUN公司在JDK中提供了DataSource接口,再由其他厂商去实现接口。目前比较常用的实现为DBCP与Druid。
DBCP
DBCP是Spring框架推荐的的连接池,Tomcat中也是使用该种数据源。需要使用到的jar包为:commons-dbcp-1.4.jar和commons-pool-1.5.6.jar。
DBCP提供了一种标准的Properties配置格式,按照规则配置则可以直接将配置文件丢给DBCP,它自行处理。标准配置格式如下:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?useSSL=false
username=root
password=1234
在JDBCUtil中的改动如下:
//DBCP
static DataSource ds = null; //先声明连接池DataSource ,方便使用
static {
try {
Properties p = new Properties();
FileInputStream in;
in = new FileInputStream("src/db.properties");
p.load(in);
ds = BasicDataSourceFactory.createDataSource(p);//将Properties传入,自动创建连接池
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getMysqlConn(){
try {
return ds.getConnection(); //从连接池中获取连接,而不是通过DriverManager接口方式
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
从连接池获取的连接,释放资源依旧是close()方法。但此时的close()方法并不是关闭连接,而是将连接放回到连接池中。
Druid
Druid是阿里巴巴提供的一个开源连接池工具,可以很方便的从DBCP迁移到Druid。
Druid的jar包为druid-1.0.9.jar,可以前往GitHub下载并查看手册、源码等。
从DBCP改为Druid只需要在创建连接池时改为DruidDataSourceFactory即可:
static {
try {
Properties p = new Properties();
FileInputStream in;
in = new FileInputStream("src/db.properties");
p.load(in);
//ds = BasicDataSourceFactory.createDataSource(p); DBCP
ds = DruidDataSourceFactory.createDataSource(p); //该为Druid
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}