社区
Web 开发
帖子详情
如何设置连接池 ?
nanfang
2003-09-13 11:57:45
我用的是TOMCAT4.0+mysql+JSP,现在想做一个工作就是联接池,我的数据库是:kmplat,请问我该如何设置和使用!?
...全文
115
7
打赏
收藏
如何设置连接池 ?
我用的是TOMCAT4.0+mysql+JSP,现在想做一个工作就是联接池,我的数据库是:kmplat,请问我该如何设置和使用!?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nanfang
2003-09-14
打赏
举报
回复
大哥们多提意见吧!我试了多次不行
seaman0916
2003-09-13
打赏
举报
回复
我觉得有些参数也可以通过配置文件呀! 很方便的!
nanfang
2003-09-13
打赏
举报
回复
多谢,.邮箱地址:mailforme@ynmail.com
xinshou1979330
2003-09-13
打赏
举报
回复
Tomcat中SERVER.XML配置:
<Context path="/bizcity" docBase="bizcity" debug="0">
<Resource name="jdbc/bizcity" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/bizcity">
<parameter><name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter><name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter><name>url</name><value>jdbc:microsoft:sqlserver://192.168.10.1:1433;DataBaseName=BizCity</value>
</parameter>
<parameter><name>username</name><value>sa</value></parameter>
<parameter><name>password</name><value>123456</value></parameter>
<parameter><name>maxActive</name><value>20</value></parameter>
<parameter><name>maxIdle</name><value>10</value></parameter>
<parameter><name>maxWait</name><value>-1</value></parameter>
</ResourceParams>
</Context>
代碼部分:
package biz;
import java.sql.*;
import javax.sql.*;
import java.util.Vector;
import java.util.Date;a
import javax.naming.*;
public class connpool{ // 連接池類
private int maxconn; //最大連接數
private int nActive; //已創建的連接數
private Vector freeCons=new Vector(); //存儲當前可用連接的數組
private Context initCtx = null; //Context 上下文类型
private Context ctx =null;
private DataSource ds=null;
public connpool()
{
this.maxconn=20;
this.nActive =0;
try{
initCtx = new InitialContext(); //初始化上下文,可以读配置文件如:web.xml
if(initCtx==null) throw new Exception("Initial Failed!");
ctx = (Context) initCtx.lookup("java:comp/env");
//szJdbc="jdbc/bizcity" 此值在Tomcat的SERVER.XML文件中配置
if(ctx!=null) ds= (DataSource) ctx.lookup("jdbc/bizcity");
if(ds==null) throw new Exception("Look up DataSource Failed!"); //以上这是从配置文件读取上下文的一种方法!
参数在上下文中定义
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
public void SetMaxConn(int n){//默認最大連接數為 20 ~ 200;
if(n<20) n=20;
if(n>200) n=200;
this.maxconn =n;
}
public synchronized void freeConnection(Connection con) //歸還連接
{ //synchronized关键字定义可异步同时连接
try{
if(con.isClosed()){
con=null; //System.out.println("Connection is Closed\n");
}
else{
freeCons.addElement(con);
System.out.println("Add Exists Connection,Current Conut=" + freeCons.size());
}
}
catch(Exception e){System.out.println(e.getMessage());}
//notifyAll();
}
public synchronized Connection getConnection(long timeout) //取得一個連接(指定超時時間)
{
long startTime=new Date().getTime(); //記錄超時用
Connection con=null;
while(con==null){
if(freeCons.size()>0){//在有可用的連接時,選用可用連接
con=(Connection) freeCons.firstElement(); //從數組中取得第一個 把能用的连接取走了一个,当然再能用的连接中,减去一个了
freeCons.removeElementAt(0); //並從數組中刪除
try{
if(con.isClosed()){ //如果已關閉,則將已創建連接減一
nActive--;
con=null;
}
}
catch(Exception e){System.out.println(e.getMessage());}
if(con!=null) System.out.println("Get Exists Connection\n");
}else if(nActive<maxconn){ //沒有可用連接且已創建的連接數小于最大數時,創建新連接
con=newConnection();
if(con!=null) System.out.print("Create New Connection ******" + nActive );
}
if(con!=null) break; //取得可用連接後,則直接退出等待
//否則,進行等待0.5s,進行下一次獲取連接的操作
try{
wait(500); //等待0.5秒
}
catch(InterruptedException e) {}
if((new Date().getTime()-startTime)>=timeout){
System.out.println("Connection timeout\n");
break; //超時則退出
}
}
return con;
}
public void release(){ //關閉所有連接
int i=freeCons.size();
int j=0;
for (j=0;j<i;j++){
Connection con=(Connection)freeCons.elementAt(j);
try{
con.close();
}
catch(SQLException e) {
System.out.println("無法關閉連接池中的當前連接");
}
}
freeCons.removeAllElements();
nActive=0;
}
private Connection newConnection(){ //創建一個新連接
Connection con=null;
try{
con=ds.getConnection();
if(con==null) throw new Exception("Create Connection Failed!");
else nActive++;
}
catch(Exception e){
System.out.println(e.getMessage());
}
return con;
}
}
JSP調用:
<%@ page language="java" import="java.sql.*"%>
<jsp:useBean id="vCon" scope="application" class="biz.connpool"/>
<%!
Connection con=null;
java.sql.Statement stmt=null;
%>
<%
try{
if(con==null) con=vCon.getConnection(10000); //最大等待時間為10s
stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
} //两个结果集 第一个参数时说结果集是不可滚动的,只能向前滚!
第二个是结果集是只读的
catch(Exception e){
System.err.println(e.getMessage());
}
ResultSet rs=stmt.executeQuery("Select *........");
........
stmt.close();
vCon.freeConnection(con);
con=null;
%>
这是前段时间在网上找的,我正在研究中,我想对楼主也会有帮助吧
瓦力1981
2003-09-13
打赏
举报
回复
想要给我留邮箱!
rootcn
2003-09-13
打赏
举报
回复
原来这个要配JNDI,一直没有看明白。
UP一下!
shaokun305
2003-09-13
打赏
举报
回复
tomcat 中自带有例子,一看就明白了,
http://127.0.0.1:8080/tomcat-docs/jndi-datasource-examples-howto.html
找到mysql的连接池配置
Java源码系列-手写数据库
连接
池
(附源码)
为了理解数据库
连接
池
的底层原理,我们可以自己手写一个类似Hikari,Druid一样的高性能的数据库
连接
池
!通过手写数据库
连接
池
掌握数据库
连接
池
底层运行原理,胜任企业级开发、提高编程内功!!! 数据库
连接
池
在...
什么是
连接
池
?为什么需要
连接
池
呢?
连接
池
的组成原理又是什么呢?
1.为什么需要
连接
池
呢? 2.什么是
连接
池
3.
连接
池
的工作原理 3.1详解
连接
池
的工作原理 3.1.1
连接
池
的创建: 3.1.2
连接
池
的管理 3.1.3
连接
池
的关闭 3.1.4相关词组详解 4.
连接
池
的规范 4.1JavaEE规范规定: ...
什么是数据库
连接
池
?为什么使用数据库
连接
池
?数据库
连接
池
工作原理
一、什么是
连接
池
? 数据库
连接
池
负责分配、管理和释放数据库
连接
,它允许应用程序重复使用一个现有的数据库
连接
,而不是再重新建立一个; 释放空闲时间超过最大空闲时间的数据库
连接
来避免因为没有释放数据库
连接
而...
为什么使用数据库
连接
池
?
使用数据库
连接
池
什么是 Java 中的数据库
连接
池
?为什么使用
连接
池
来管理数据库
连接
?
数据库
连接
池
(database connection pool)是在 Java 中用于管理数据库
连接
的一种技术。它的主要目的是提高数据库
连接
的重用性和性能。在传统的数据库
连接
方式中,每次与数据库建立
连接
时都需要进行一系列的网络通信...
Web 开发
81,094
社区成员
341,711
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章