美文网首页
JavaEE-1-连接池:DBCP&C3P0

JavaEE-1-连接池:DBCP&C3P0

作者: ZzzRicardo_Yue | 来源:发表于2018-07-25 15:47 被阅读0次

    前情提要(即关于如何手动创建自己的连接池):

    连接池就是一个集合,里面实现存放了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文件配置
    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");

    相关文章

      网友评论

          本文标题:JavaEE-1-连接池:DBCP&C3P0

          本文链接:https://www.haomeiwen.com/subject/petjmftx.html