社区
Web 开发
帖子详情
求连接池
zyzyandzyzy
2003-10-09 10:55:39
大家的连接池都是自己写的吗,有谁可以发个给我看看,谢谢了,
zyzyandzyzy@sina.com
另外问一下,连接池的配置一定要写在connectionpool.cfg里的吗,可不可以写在ini文件里。谢了
...全文
60
5
打赏
收藏
求连接池
大家的连接池都是自己写的吗,有谁可以发个给我看看,谢谢了, zyzyandzyzy@sina.com 另外问一下,连接池的配置一定要写在connectionpool.cfg里的吗,可不可以写在ini文件里。谢了
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
withwind
2003-10-10
打赏
举报
回复
如果要自己写,其实很简单的,hehe......,给你个思路:
1. 初始化生成n个连接,压入Stack
2. 接到申请连接请求,如果Stack不会空,则pop一个连接,否则等待
3. 应用程序调用完成后,返回连接,压入Stack,唤醒所有等待
有的容器是带有连接池功能的,如:weblogic
没记错的话,<<java servlets 2.3编程指南>>这本书上有例子
etre
2003-10-10
打赏
举报
回复
还写在INI里,最好是写在一个xml里面啊,我写了一个可以支持Oracle,Mysql,Sql-server,Syabase,效率很高啊
给你看一下吧
<DBMapping>
<dataSource-mapping dsName="globalCom" dbPoolConnectionName="globalComPool" dbInitialCapacity="2" dbMaxCapacity="5" dbDriverName="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource" dbServerName="rd1" dbServiceName="globalcom" dbPort="3306" dbUser="root" dbPassword="" dbDescription="globalCom" dbLoginTimeout="10"/>
<!--
<dataSource-mapping dsName="testDs1" dbPoolConnectionName="testPool1" dbInitialCapacity="2" dbMaxCapacity="5" dbDriverName="com.orient.oracle.PDataSource" dbServerName="cuipeng" dbServiceName="ora8" dbPort="1521" dbUser="system" dbPassword="manager" dbDescription="fgg" dbLoginTimeout="10"/>
<dataSource-mapping dsName="testDs2" dbPoolConnectionName="testPool2" dbInitialCapacity="2" dbMaxCapacity="5" dbDriverName="com.orient.oracle.PDataSource" dbServerName="cuipeng" dbServiceName="ora8" dbPort="1521" dbUser="system" dbPassword="manager" dbDescription="fgg" dbLoginTimeout="10"/>
-->
</DBMapping>
zyzyandzyzy
2003-10-10
打赏
举报
回复
up
programeyonger
2003-10-10
打赏
举报
回复
正如楼上所说的那样!比较简单!
aku0708
2003-10-10
打赏
举报
回复
import java.sql.*;
import java.util.*;
public class ConnBean {
private int inUse=0;
private Vector connections=new Vector();
private String poolname;
private String dbid;
private String drivername;
private String username;
private String passwd;
private int maxconn;
public ConnBean(String poolname,String dbid,String drivername,
String username,String passwd,int maxconn) {
this.poolname=poolname;
this.dbid=dbid;
this.drivername=drivername;
this.username=username;
this.passwd=passwd;
this.maxconn=maxconn;
}
public synchronized void releaseConn(Connection conn){
connections.addElement(conn);
inUse--;
}
public synchronized Connection getConn(){
Connection con=null;
if(connections.size()>0){
con=(Connection)connections.elementAt(0);
connections.removeElementAt(0);
try {
if (con.isClosed())
con = getConn();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
else if(maxconn==0||inUse<maxconn){
con=newConn();
}
if(con!=null){
inUse++;
}
return con;
}
private Connection newConn(){
Connection con=null;
try{
Class.forName(drivername).newInstance();
con=DriverManager.getConnection(dbid,username,passwd);
}
catch(Exception e){
e.printStackTrace();
return null;
}
return con;
}
public synchronized void closeconn(){
Enumeration allConnections=connections.elements();
while(allConnections.hasMoreElements()){
Connection con=(Connection) allConnections.nextElement();
try{
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
connections.removeAllElements();
}
}
//管理连接池
import java.sql.*;
import java.util.*;
public class ConnManager {
private Vector poolnames=new Vector();
private Vector drivernames=new Vector();
private Vector dbids=new Vector();
private Vector usernames=new Vector();
private Vector passwds=new Vector();
private Vector maxcons=new Vector();
private Hashtable connPools=new Hashtable();
public ConnManager() {
//在这里创建不同类型数据库的连接池,只需在这里重写下面的代码,比如SQLSERVER,ORACLE, ACCESS,MYSQL
poolnames.addElement("连接池名");
drivernames.addElement("JDBC驱动");
dbids.addElement("url");
usernames.addElement("用户名");
passwds.addElement("密码");
maxcons.addElement("最大连接数");
createPools();
}
public void realeaseConn(String name,Connection con){
ConnBean pool=(ConnBean)connPools.get(name);
if(pool!=null)
pool.releaseConn(con);
}
public Connection getConn(String name){
ConnBean pool=(ConnBean)connPools.get(name);
if(pool!=null)
return pool.getConn();
return null;
}
public synchronized void closeConn(){
Enumeration allPools=connPools.elements();
while(allPools.hasMoreElements()){
ConnBean pool=(ConnBean)allPools.nextElement();
pool.closeconn();
}
}
private void createPools(){
for(int i=0;i<poolnames.size();i++){
String poolname=poolnames.elementAt(i).toString();
String drivername=drivernames.elementAt(i).toString();
String dbid=dbids.elementAt(i).toString();
String username=usernames.elementAt(i).toString();
String passwd=passwds.elementAt(i).toString();
int maxconn=0;
try{
maxconn=Integer.parseInt(maxcons.elementAt(i).toString());
}
catch(NumberFormatException e){
e.printStackTrace();
}
ConnBean pool=new ConnBean(poolname,dbid,drivername,username,passwd,maxconn);
connPools.put(poolname,pool);
}
}
}
DBCP 数据源jar包
DBCP(Jakarta Commons DBCP)数据源是Apache软件基金会的一个开源项目,它提供了一个数据库
连接池
服务。在Java应用程序中,特别是那些基于Servlet容器(如Tomcat)的应用,DBCP是一个常用的数据库连接管理工具。它...
什么是
连接池
?为什么需要
连接池
呢?
连接池
的组成原理又是什么呢?
1.为什么需要
连接池
呢? 2.什么是
连接池
3.
连接池
的工作原理 3.1详解
连接池
的工作原理 3.1.1
连接池
的创建: 3.1.2
连接池
的管理 3.1.3
连接池
的关闭 3.1.4相关词组详解 4.
连接池
的规范 4.1JavaEE规范规定: ...
数据库
连接池
学习笔记(一):原理介绍+常用
连接池
介绍
什么是
连接池
数据库
连接池
负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。 为什么要使用
连接池
数据库连接是一种关键的有限的昂贵的资源,这一点在多...
实战:搞懂数据库
连接池
和Druid
连接池
Druid数据库
连接池
中,应用线程向
连接池
获取连接时,如果池中没有连接,则应用线程会在notEmpty上等待,同时Druid数据库
连接池
中有一个创建连接的线程,会持续的向
连接池
创建连接,如果
连接池
已满,则创建连接的线程...
十二、
连接池
线程池配置——HttpClient
连接池
通过合理配置
连接池
参数、正确处理连接的使用和释放,以及关注
连接池
的生命周期和性能监控,可以有效提高。下面是对
连接池
源码的重要步骤分析,包括连接的复用和非复用情况的处理,以及
连接池
内部的数据结构。此异常...
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章