数据库连接池的问题

cjoy4856 2012-02-10 01:39:09
项目框架为Struts2+hibernate+spring
数据库连接池用的是c3p0 配置如下

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${user}" />
<property name="password" value="${password}" />

<property name="jdbcUrl" value="${jdbcUrl}" />
<property name="driverClass" value="${driverClass}" />
<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>//100
<property name="minPoolSize" value="${c3p0.minPoolSize}"/>//10
<property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>//10
<property name="maxIdleTime" value="${c3p0.maxIdleTime}"/> //100
<property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>//5
<!--
<property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/> //5
-->
<property name="acquireRetryDelay" value="${c3p0.acquireRetryDelay}"/>//10
<property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>//true
<property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>//100
<property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}"/>//60
<!--
<property name="numHelperThreads" value="${c3p0.numHelperThreads}"/>//5
-->
</bean>

数据库使用的是oracle10g (数据库设置时200个连接)
bug现象:
有时能正常获取数据库的连接,有时不能获取数据库的连接。不能获取数据库的连接时,我查看了数据库中的空闲的连接有很多。并且数据库中的连接的状态只有一个是active。连接发生异常信息为
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; An attempt by a client to checkout a Connection has timed out.; nested exception is java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
。希望大家能给以不同意意见,如果有以前遇到并解决的大侠,请教小弟。谢谢!!!!!
...全文
124 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
w3564542345 2012-07-18
  • 打赏
  • 举报
回复
估计是你把当前的session关闭了,然后你又打开了session导致session已经关闭,或者是xml,opensession没配好
cjoy4856 2012-02-10
  • 打赏
  • 举报
回复
去除checkoutTimeout 的话,应该也是使用迷默认的值呀.我去试试。谢谢大家的建议。
萝asdf 2012-02-10
  • 打赏
  • 举报
回复
楼上正解!
飞跃颠峰 2012-02-10
  • 打赏
  • 举报
回复
C3p0的checkoutTimeout属性配置去掉看看
synized 2012-02-10
  • 打赏
  • 举报
回复
楼主为何不在tomcat中的context.xml中设置连接池
<Resource
name="jdbc/bbs" //连接池名字 后面需要用到
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
driverClassName="com.mysql.jdbc.Driver"//按自己需要改
url="jdbc:mysql://127.0.0.1:3306/t_bbs"//t_bbs是数据库名
username="root"
password="root"
/>

然后

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class ConnDB
{
private static DataSource ds = null;
static
{
Context context;
try
{
context = new InitialContext();
ds = (DataSource) context.lookup("java:comp/env/jdbc/bbs");//连接池名字
}
catch (NamingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static Connection getConnection2()
{
if (ds != null)
{
try
{
return ds.getConnection();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
return null;
}

}



需要连接的时候只需要在类中使用Connection conn = ConnDB.getConnection2();就可以了

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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