数据库连接池
来源:互联网 发布:网络传销崩盘前兆 编辑:程序博客网 时间: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
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 大整数加减法(基础,细节题型)
- YJango的循环神经网络——实现LSTM YJango的循环神经网络——实现LSTM YJango YJango 7 个月前 介绍 描述最常用的RNN实现方式:Long-Short Term Me
- Spring中Bean的作用域(Scope)
- ./configon keepalived异常
- C++/C++11中头文件<cmath>的使用
- 数据库连接池
- card sorting
- 单链表的相关操作
- 激活Intellij IDEA
- jzoj5398. 【NOIP2017提高A组模拟10.7】Adore
- string 简单使用
- LeetCode 题解
- Leetcode-553
- JNDI数据库连接池