• 连接池


    什么是连接池

    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

    编写数据库连接池

    编写数据库连接池需要实现javax.sql.DataSource接口。
    DataSource接口中定义了两个重载的getConnection方法:

    Connection getConnection()

    实现DataSource接口,并实现连接池功能的步骤:

    1.在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入到LinkedList对象中。

    2.实现getConnectin方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。

    3.当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。

    数据库连接池核心代码

    使用动态代理技术构建连接池中的connection

    proxyConn = (Connection)Proxy.newProxyInstance(this.getClass().getClassLoader(),conn.getClass().getInterfaces(),new InvocationHandler(){

    //此处为内部类,当colse方法被调用时将conn还回池中,其他方法直接执行

    public Object invoke(Object proxy,Method method,Object[]args) throws Throwable{

    if(method.getName().equals("close")){

    pool.addLast(conn);

    return null;

    }

    return method.invoke(conn,args);

    }

    });

    开源数据库连接池

    现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。

    也有一些开源组织提供了数据源的独立实现: DBCP 数据库连接池 C3P0 数据库连接池

    实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。

    DBCP数据源

    DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件: Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库

    Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

    使用DBCP示例代码:

    static{

    InputStream in = JdbcUtil.class.getClassLoader().getResourdeAsStream("dbcpconfig.properties");

    Properties prop = new Properties();

    prop.load(in);

    BasicDataSourceFactory factory = new BasicDataSourceFactory();

    dataSource = factory.createDataSource(prop);

    }

  • 相关阅读:
    Java学习笔记-函数
    Java学习笔记-数组
    Git 常用命令速查表
    $.fn与$.fx什么意思; $.extend与$.fn.extend用法区别; $(function(){})和(function(){})(jQuery)
    offsetWidth的bug
    jQuery对象和DOM对象转换,解决jQuery对象不能使用js方法的问题
    1
    $().ready()与window.onload的不同
    offsetHeight在不同的浏览器下取值不同
    getElementsByName兼容ie 但并不是兼容ie下的所有标签
  • 原文地址:https://www.cnblogs.com/future-zmy/p/6192761.html
Copyright © 2020-2023  润新知