昨晚将事务介绍完毕今天主要介绍现在较为流行的两大数据库连接池
什么是DBCP?
DBCP 是Apache提供的一款开源免费数据库连接池,是 一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
DBCP如何使用?
代码示例:前提必须在项目中导入commons-dbcp.jar 和commons-pool.jar
public void fun()throws SQLException(){
//获取连接对象
BasicDataSource da=new BasicDataSource();
//设置四大参数】
ds.setDriverClassName(“com.mysql,cj.jdbc.Driver”);
ds.setUrl(“jdbc:mysql://localhost:3306/user?useSSL=false&serverTimezone=UTC”);//
ds.setUsername(“root”);
ds.setPassword(“password”);
//配置连接池
ds.setMaxActive(20); //连接池最大连接数
ds.setMaxIdle(10); //连接池最大空闲连接数
ds.setInitialSize(10); //初始化连接数
ds.setMinIdle(2); //最小空闲连接数
ds.setMaxWait(1000); //最大等待连接时间 为毫秒数
//获取连接
Connection con=ds.getConnection();
//向连接池归还连接
con.close();
}
四大参数配置为基本配置,任何的连接池都需要对这四大参数进行配置主要介绍一下池参数的配置
初始化池大小,池中就会给出10个连接对象
默认值为0 : ininialSize=0;
最大连接数:MaxActive(50); 表示池中最多提供50个连接对象包含已连接对象和未连接对象
最大空闲连接数: MaxIdle(10); 表示最多有10 个空闲连接如果大于十个会自动消化多余的空闲连接
最小空闲连接数: MinIdle(2); 表示至少允许有两个空闲连接如果小于两个必须再建立空闲连接
最大等待时间: MaxWait(1000);请求连接时候最多让其等待1000毫秒
c3p0介绍
c3p0也是一种开源免费的连接池(现如今被广泛推广使用)
代码示例:
@Test
public void fun() throws PropertyVetoException, SQLException {
// 创建连接池对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 进行四大参数的配置
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb3");
dataSource.setUser("root");
dataSource.setPassword("123");
// 池配置
dataSource.setAcquireIncrement(5); //每次的增量
dataSource.setInitialPoolSize(20); //初始化连接数
dataSource.setMinPoolSize(2); //最少连接数
dataSource.setMaxPoolSize(50); //最大连接数
Connection con = dataSource.getConnection();
con.close();
}
注意对四大参数配置时要注意与dbcp这四个方法的区别存在差异
c3p0被调用的四大方法:setDriverClass(); setJdbcUrl();setUser();setPassword();
dbcp被调用的四大方法:setDriverClassName(); setUrl();setUsername();setPassword();
c3p0的四大参数配置也可以通过配置文件来完成
配置文件要求:文件名称必须叫lc3p0-config.xml 文件位置也必须再src路径下
当然配置文件也可以时Properties,但是建议用xml
示例:
dbcp和c3p0
注意url配置时候在代码块中是jdbc:mysql://localhost:3306/user?useSSL=false&serverTimezone=UTC
在配置文件中useSSL=false和serverTimezone=UTC中的与符号“&”用“& amp”替换且必须用分号隔开
因为xml和html相似 特殊字符必须转义
使用文件配置后代码块中对连接池的操作
public void fun2() throws SQLException{
// 此处不用指定配置文件名称,默认就是c3p0-config
ComboPooledDataSource dataSource = new ComboPooledDataSource();
Connection con = dataSource.getConnection();
con.close();
}
c3p0的配置文件中可以配置多个连接信息,可以给每个配置起个名字,这样可以方便的通过配置名称来切换配置信息。上面文件中默认配置为mysql的配置,名为oracle-config的配置也是mysql的配置
代码块如下:
@Test
public void fun() throws SQLException{
//此处则需要指明配置文件名称oracle-config
ComboPooledDataSource dataSource = new ComboPooledDataSource(“oracle-config”);
Connection con = dataSource.getConnection();
con.close();
}
总结:dbcp和c3p0的区别
dbcp没有自动的去回收空闲连接的功能 c3p0则提供了自动回收的功能
两者对数据连接的处理方式不同 c3p0提供最大空闲时间 dbcp提供最大连接数
c3p0当连接超过最大空闲连接时间时当前连接就会被掐断
dbcp当超过最大连接数时连接则被中断
dbcp它的原理是维护多个连接对象Connection,在web项目要连接数据库时候直接使用它维护的对象进行连接,省去每次都要创建连接对象的麻烦,提高了效率和内存使用,因此在效率方面dbcp比c3p0更加高效而且减少了内存消耗