数据库连接池

来源:互联网 发布:网络传销崩盘前兆 编辑:程序博客网 时间:2024/06/06 06:42

  • 编写数据库连接池

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

Connection getConnection()

Connection getConnection(String username, String password) 

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

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

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

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


Collection保证将自己返回到LinkedList中是此处编程的难点

数据库连接池:第一次访问比较慢,后面就好了

class B extends Thread {//继承线程

public void run(){

while(true){

// 把用完的Connection 在加入到连接池中

for(Connection c : MyConnPool.t){

if(c.isClose()){

// 状态进行改变

MyConnPool.list.add(c);

}

}

int size = MyConnPool.list.size();

if(size < 20){

int x = 50 - size;

for(int i = 0 ;  i < x ; i++){

MyConnPool.list.add(DBUtil.getConnection());

}

}

if(size > 150){

int y = size - 120;

for(int i = 0; i < y; i++){

MyConnPool.list.remove(MyConnPool.list.size()-1);

}

}

Thread.sleep(3000);

}

}

}

class MyConnPool {

private static List<Connection> list = new ArrayList<Conneciton>();

private static List<Connection> t = new ArrayList<Conneciton>();

static {//静态初始化块

for(int i = 0; i < 100; i++){

Connection conn = DBUtil.getConnection();

list.add(conn);

}

new B().start();

}

public static Connectoin getConnection(){

Connection conn = list.get(list.size()-1);

list.remove(conn);

t.add(conn);

return conn;

}

}

class A extends HttpServlet {

public void init(){

Class.forName("MyConnPool");

}

}

配置:

<servlet>

<servlet-name>A</serlvet-name>

<servlet-class>com.softeem.servlet.A</servlet-class>

<load-on-startup>1

</servlet>

<servlet-mapping>

<servlet-name>A</serlvet-name>

<url-pattern>/a.do</url-pattern>

</servlet-mapping>

  • 开源数据库连接池

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

也有一些开源组织提供了数据源的独立实现:

DBCP数据库连接池

C3P0数据库连接池

在使用了数据库连接池之后,在项目的实际开发中就不需要编写连接数据库的代码了,直接从数据源获得数据库的连接。


DBCP数据源

DBCP是Apache软件基金组织下的开源连接池实现,要使用DBCP数据源,需要应用程序应在系统中增加如下两个 jar 文件:

Commons-dbcp.jar:连接池的实现

Commons-pool.jar:连接池实现的依赖库

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

C3P0数据源

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0数据源在项目开发中使用得比较多。 

c3p0与dbcp区别

dbcp没有自动回收空闲连接的功能

c3p0有自动回收空闲连接功能


在应用程序中加入C3P0连接池

导入相关jar包:

c3p0-0.9.2-pre1.jar、mchange-commons-0.2.jar,如果操作的是Oracle数据库,那么还需要导入c3p0-oracle-thin-extras-0.9.2-pre1.jar

在类目录下加入C3P0的配置文件:c3p0-config.xml


参考地址

http://www.cnblogs.com/xdp-gacl/p/4002804.html

http://blog.csdn.net/xiada_you_comeon/article/details/71032678

http://blog.csdn.net/m0_37893932/article/details/73930014?locationNum=6&fps=1

http://blog.csdn.net/sosfnima/article/details/52825640?locationNum=7&fps=1

原创粉丝点击