物件的數量 與 連線池連線數量的問題,困擾已久。
開發環境:win2000 server + j2sdk1.4 + Tomcat5.019 + SQLServer2000
系統概況:
*系統中用到了jsp,Servlet,Tag簡單標籤,javaBean,通用類。
*在Tomcat中配置了一連線池,最大連線數(maxActive)限定為3個,(主要是為了方便測試)空閒時最少保持連線數(maxIdle)為1個。
*寫了一個連線資料庫的類,負責與資料庫建立連線並返回Connection。除了產生連線的方法,還有一個關閉連線方法,程式碼如下:
package Panabia.db;
import javax.sql.DataSource;
import javax.naming.*;
import java.sql.*;
public class conFactory
{
private static DataSource ds=null;
private Connection con=null;
public Connection gainCon() throws NamingException,SQLException
{
if(ds==null){
synchronized(this){
if(ds==null){
Context ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/Panabia");
}
}
}
con=ds.getConnection();
return con;
}
public void release() throws SQLException
{ if(con!=null&&!con.isClosed()) con.close(); }
}
問題是:
在測試的時候,如果在jsp中以javaBean的形式(<jsp:useBean id="db" class="Panabia.db.conFactory" scope="session"/>)使用conFactory,連線池工作穩定,一切都很正常;空閒時連線池中的個數保持為1,最高不過3(其實也過不了3)。
但如果將這個類匯入到 JSP標籤 中使用時,同時SQL連線數竟然達到了5個?!但是資料庫連線池最大的同時連線數被限定到 3 個,為什麼能達到5個呢------更怪的是,這5個連線會一直處於 ESTABLISHED 狀態,不會被釋放掉。
而單獨使用 javaBean 測試,最大SQL連線達到3的時候,空閒一段時間,2個連線就會被釋放,只留下1個保持連線。
在JSP標籤中引用連線類程式碼(片段):
package Panabia.tags;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.IOException;
import java.sql.*;
import javax.naming.NamingException;
import Panabia.db.conFactory; //匯入連線類
public class add_company extends TagSupport{
public int doStartTag() throws JspException{
Connection con=null;
conFactory cfy=new conFactory(); //生成連線類例項 cfy
............
........
con=cfy.gainCon(); //獲取連線
................
.......(略)}
*我懷疑Tomcat是不是開了 5 個連線池?
因為用到的 JSP標籤 比較多,在每個標籤內都是象上面那樣生成 conFactory的物件 cfy,然後獲取SQL連線;
每個標籤生成一個cfy,那n個標籤不是就生成了n個conFactory物件?
每個物件一個連線池,所以,就出現了上面所說的同時開了5個連線的現象----
----不知這樣認為對否?
但使用 javaBean時不會出現這種現象,我想,應該是 scope="session" 的緣故,jsp會自動在每個JSP頁面中共享同一個 conFactory物件,而
在 JSP標籤 裡是每個 標籤 生成一個物件,於是......??
----這個問題如何解決呢?小弟弟剛剛入門,對“物件緩衝池”之類的東東還不是特別明白,還請各位DX指條明路!
系統概況:
*系統中用到了jsp,Servlet,Tag簡單標籤,javaBean,通用類。
*在Tomcat中配置了一連線池,最大連線數(maxActive)限定為3個,(主要是為了方便測試)空閒時最少保持連線數(maxIdle)為1個。
*寫了一個連線資料庫的類,負責與資料庫建立連線並返回Connection。除了產生連線的方法,還有一個關閉連線方法,程式碼如下:
package Panabia.db;
import javax.sql.DataSource;
import javax.naming.*;
import java.sql.*;
public class conFactory
{
private static DataSource ds=null;
private Connection con=null;
public Connection gainCon() throws NamingException,SQLException
{
if(ds==null){
synchronized(this){
if(ds==null){
Context ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/Panabia");
}
}
}
con=ds.getConnection();
return con;
}
public void release() throws SQLException
{ if(con!=null&&!con.isClosed()) con.close(); }
}
問題是:
在測試的時候,如果在jsp中以javaBean的形式(<jsp:useBean id="db" class="Panabia.db.conFactory" scope="session"/>)使用conFactory,連線池工作穩定,一切都很正常;空閒時連線池中的個數保持為1,最高不過3(其實也過不了3)。
但如果將這個類匯入到 JSP標籤 中使用時,同時SQL連線數竟然達到了5個?!但是資料庫連線池最大的同時連線數被限定到 3 個,為什麼能達到5個呢------更怪的是,這5個連線會一直處於 ESTABLISHED 狀態,不會被釋放掉。
而單獨使用 javaBean 測試,最大SQL連線達到3的時候,空閒一段時間,2個連線就會被釋放,只留下1個保持連線。
在JSP標籤中引用連線類程式碼(片段):
package Panabia.tags;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.IOException;
import java.sql.*;
import javax.naming.NamingException;
import Panabia.db.conFactory; //匯入連線類
public class add_company extends TagSupport{
public int doStartTag() throws JspException{
Connection con=null;
conFactory cfy=new conFactory(); //生成連線類例項 cfy
............
........
con=cfy.gainCon(); //獲取連線
................
.......(略)}
*我懷疑Tomcat是不是開了 5 個連線池?
因為用到的 JSP標籤 比較多,在每個標籤內都是象上面那樣生成 conFactory的物件 cfy,然後獲取SQL連線;
每個標籤生成一個cfy,那n個標籤不是就生成了n個conFactory物件?
每個物件一個連線池,所以,就出現了上面所說的同時開了5個連線的現象----
----不知這樣認為對否?
但使用 javaBean時不會出現這種現象,我想,應該是 scope="session" 的緣故,jsp會自動在每個JSP頁面中共享同一個 conFactory物件,而
在 JSP標籤 裡是每個 標籤 生成一個物件,於是......??
----這個問題如何解決呢?小弟弟剛剛入門,對“物件緩衝池”之類的東東還不是特別明白,還請各位DX指條明路!
相關文章
- 資料庫連線池的問題,連線池物件為靜態變數有問題麼資料庫物件變數
- 連線池和連線數詳解
- 關與連線池的配置問題!
- 記錄連線數導致警報失效,連線池少問題
- 關於連線池的問題!
- Apache提供併發連線請求數量Apache
- 探討.net Socket支援線上連線數量
- WeAreSocial:移動連線超過人口數量
- 問個jrun連線池的問題
- tomcat連線池問題Tomcat
- Tomcat最大連線數問題Tomcat
- 更新資料庫允許連線的會話數量和使用者數量資料庫會話
- Http持久連線與HttpClient連線池HTTPclient
- 詳解 Tomcat 的連線數與執行緒池Tomcat執行緒
- ServiceStack.Redis的原始碼分析(連線與連線池)Redis原始碼
- Druid連線池引數maxWait配置錯誤引發的問題UIAI
- 各位老大,用tomcat的連線池在application獲得連線的問題TomcatAPP
- DBCP連線池配置引數說明
- hibernate資料庫連線池的問題資料庫
- 一個資料庫連線池的問題資料庫
- (請問)weblogic的連線池Web
- 困擾已久的效率問題.看過jive熟悉模式的老大們進..模式
- weblogic +mysql 連線池 中文問題??WebMySql
- Jboss的最大連線數
- 連線池
- 遠端連線達到最大數量時操作步驟
- Oracle檢視允許的最大連線數和當前連線數Oracle
- apache-tomcat模式下連線池的問題?ApacheTomcat模式
- [轉帖]HikariCP連線池引數解釋
- MYSQL 檢視最大連線數和修改最大連線數MySql
- [求助]資料庫連線池配置問題資料庫
- PHP-fpm MongoDB 連線數爆了問題PHPMongoDB
- 資料庫的連線數資料庫
- TimesTen支援的連線數
- 加大MySql的最大連線數MySql
- golang連線MySQL時候的連線池設定GolangMySql
- 解決資料庫連線池連線mysql時,每隔8小時mysql自動斷開所有連線的問題資料庫MySql
- 解決Oracle 11gR2 空閒連線過多,導致連線數滿的問題Oracle