gpt4 book ai didi

java - 连接池显示数据库中的非 Activity 连接

转载 作者:行者123 更新时间:2023-12-01 15:44:33 25 4
gpt4 key购买 nike

我在 struts 应用程序中使用带有 SharedPoolDataSource 的连接池。应用程序用户通过用户界面动态传递连接参数。我正在创建 DriverAdapterCPDS 对象并将其分配给 SharedPoolDataSource obj props。

SharedPoolDataSource tds = new SharedPoolDataSource();
tds.setConnectionPoolDataSource(cpds);
tds.setMaxActive(5);
tds.setMaxIdle(2);
tds.setMaxWait(50);
tds.setTestOnBorrow(true);
tds.setValidationQuery(validationQuery);

我将其存储在 DBUtil 类的哈希表中,以公司名称作为键。像这个应用程序一样,用户分配与每个公司相关的大量数据库详细信息。

dbUtil.DSht.put(comp, tds);

从另一个程序(Swing App)用户发送公司名称。因此,我需要获取与公司相关的数据源对象,并对分配给用户的数据库执行查询。并将结果作为对象返回。

所以我写了一个这样的函数

public static Connection getClientConnection(String comp){
Connection con = null;
try{
if(!dbUtil.DSht.contains(comp)){
loadClientDataSource(comp);
}
DataSource ds = (DataSource)dbUtil.DSht.get(comp);
Idle:"+bds.getNumIdle());
con = ds.getConnection();
}catch(Exception e){
e.printStackTrace();
throw new DBUtilException("Unable to get the client connection object. Cause: "+e.getMessage());
}
return con;
}

关闭数据库连接

public static void closeConnection(Connection con){
try{
if(con != null)
con.close();
}catch(Exception e){
e.printStackTrace();
}
}

我在finally block 中调用这个closeConnection函数

try{
con = DBUtil.getClientConnection(comp);
pstmt = con.prepareStatement(sqlQuery);
pstmt.executeQuery();
}catch(SQLException sqle) {
sqle.printStackTrace();
throw new QueryException("Unable to add query. Cause: "+sqle.getMessage());
}finally{
DBUtil.closeStatement(pstmt);
DBUtil.closeConnection(con);
}

使用连接池有什么问题吗?使用此应用程序数据库后,显示与我的计算机关联的大量INACTIVE连接。即使关闭连接后它还是这样显示。我只为数据库设置了 2 个 MAXIDLE 连接。

有什么问题吗?为什么它显示那么多INACTIVE连接?如果我们把数据源放在hashtable中会有什么问题吗?

最佳答案

不用担心, session 处于 INACTIVE 状态并不是异常情况。检查http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:914029001168

关于java - 连接池显示数据库中的非 Activity 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7344039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com