JavaEE-1-连接池:DBCP&C3P0
前情提要(即关于如何手动创建自己的连接池):
连接池就是一个集合,里面实现存放了n个和数据库的连接,哪个java程序需要与数据库建立连接,直接从这个集合中取就行了。省去了麻烦的建立连接的过程。
在JDBCUtils中的静态代码块中,我们要先生成多个Connection连接,然后存入ArrayList中。
图示
图示2
然后这里写一个静态方法就可以从JDBC连接池中快速获取Connection了~~~
图示3
以上只是最最基础的连接池,还需要考虑连接的回收、我们需要创建多少连接池等等问题。
所以有大量的第三方公司提供了连接池给我们开发者使用
1、带有配置文件的DBCP的使用
我们自己创建一个DBCPUtils.class的工具类用于从连接池获取连接
DBCP可以直接读取配置文件,使用BasicDataSourceFactory生成(方法名为createDataSource(new FileInputStream("xxx.properties"))
)BasicDataSource(即我们的连接池)。
我们在静态代码中这么写:
DataSource ds=null; //这个就是连接池
static{
Properties ps=new Properties();
//这里的dbcp.properties自己写好,放在包的根目录下面,这个路径
//ps.load(new FileInputStream("dbcp.properties")); 但是一般使用类加载器来加载这个配置文件
ps.load(DBCPUtils.class.getClassLoader() //获取类加载器
.getResourceAsStream("dbcpconfig.properties")); //这里是把资源变成流,在src文件夹下面去找这个资源
ds = BasicDataSourceFactory.createDataSource(ps); //解析配置文件,直接创建连接池
}
然后可以用静态方法自动获取连接:
public static Connection getConnection() throws SQLException {
//这个bdSource一开始是空的,如果没有对它初始化,这里调用getConnection()是得不到连接的
return bdSource.getConnection();
}
接着我们就可以写一个JDBC的工具类来执行基础的增删查改操作了。
1、基础
可以认为比DBCP好,开源免费
项目添加jar依赖:
添加依赖项
- 第二个是jdk1.3版本之前使用的jar包
- 第三个文件是用于Oracle数据库的连接池
- 第四个文件是c3p0的依赖jar包
在C3P0连接池中遵循了javax.sql.DataSource接口的实现类:ComboPooledDataSource
public class C3P0Utils {
private static ComboPooledDataSource ds = new ComboPooledDataSource();
public static Connection getConnection() throws SQLException{
//不用自己去DriverManager获取,而是从C3P0连接池获取
return ds.getConnection();
}
}
与前一个DBCP连接池的配置一样,此时我们的连接池并没有初始化
我们可以在static代码块中初始化连接池:
初始化连接池
上面这里的红色下划线是异常,try/catch即可。
然后在主类中使用C3P0Utils.getConnection()即可获取到我们想要的Connection对象。
2、使用配置文件设置C3P0连接池初始信息
- 配置文件分XML和properties两种,C3P0用的是XML文件配置
字如其名,很容易理解~
配置文件设置完之后,可以把之前写在static中的数据库连接初始化代码给删去了,但是这里要注意,配置文件必须命名为“c3p0-config.xml”,
注意demo03包中的C3P0Utils02.java中的
private static ComboPooledDataSource ds = new ComboPooledDataSource();
这个对象会自动加载这个配置文件,这个和DBCP是不同的,DBCP需要自己手动加载
接下来就可以直接在main方法中使用getConnection()方法了。
3、测试C3P0连接池
测试C3P0连接池这些方法具体怎么写见《JavaEE-0-JDBC数据库连接》。
- 从连接池中拿到的Connection conn,我们使用结束之后对其进行conn.close()的操作,这个连接不是被关闭了,而是返回到了连接池中去(这里用到的原理是 JAVA中的代理模式)
4、使用C3P0配置文件中的非默认配置
xml配置文件示例如图中所示,在配置文件中写的是
<default-config>
,即默认配置我们在C3P0Utils.java中写的
private static ComboPooledDataSource ds = new ComboPooledDataSource();
这个的构造函数是空参数的,但是这个new ComboPooledDataSource()
还有一个重载方法,是可以加载在这个配置文件中的其他配置的。我们先对配置文件进行添加新的配置格式:
新的配置
如图,在中间位置再加上自己的配置信息,然后对C3P0Utils进行修改:
private static ComboPooledDataSource ds = new ComboPooledDataSource("abcd");