求连接池

zyzyandzyzy 2003-10-09 10:55:39
大家的连接池都是自己写的吗,有谁可以发个给我看看,谢谢了,
zyzyandzyzy@sina.com
另外问一下,连接池的配置一定要写在connectionpool.cfg里的吗,可不可以写在ini文件里。谢了
...全文
47 5 打赏 收藏 转发到动态 举报
写回复
用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);
}
}
}

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧