TOMCAT连接池超时连接断开问题

zhyou110z 2010-12-16 10:30:55

<Resource name="jdbc/DBpool"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
maxIdle="50"
maxActive="500"
maxWait="5000"
driverClassName="com.mysql.jdbc.Driver"
removeAbandoned="true" //这里已经写了 为什么空闲的连接不会自己断开
removeAbandonedTimeout="20"
url="jdbc:mysql://localhost:3306/oasystem?useUnicode=true&characterEncoding=UTF-8"/>



我用的是TOMCAT6 MYSQL5.0 连接池用的是TOMCAT6 的连接池
...全文
859 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iihero 2010-12-16
  • 打赏
  • 举报
回复
rs为什么不close?

zhyou110z 2010-12-16
  • 打赏
  • 举报
回复
大部分关了


@SuppressWarnings("unchecked")
public ArrayList<FileCategory> getFileCategoryByName(String branch)
{
ActionContext.getContext().getSession().put("branchAddress", branch);
//当前浏览的地址
ArrayList<FileCategory> fclist=new ArrayList<FileCategory>();

try {
state = conn.createStatement();
String sql ="select * from filecategory where branch='"+branch+"'";
rs = state.executeQuery(sql);

while(rs.next())
{
FileCategory fc = new FileCategory();

fc.setId(rs.getInt("id"));
fc.setFilename(rs.getString("filename"));
fc.setCreatemenid(rs.getString("createmenid"));
fc.setCreatetime(rs.getString("createtime"));
fc.setShopname(rs.getString("shopname"));
fc.setBranch(rs.getString("branch"));

fclist.add(fc);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
state.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

应该关了的
1.我只执行这一段代码 第一调用 连接的进程数为2

2.以后每次再调用时 进程数加 1 原始的2个 有一个时间初始了

iihero 2010-12-16
  • 打赏
  • 举报
回复
你调用完之后,close了吗?得放回池里边才行啊。
zhyou110z 2010-12-16
  • 打赏
  • 举报
回复
每次调用数据库进程数都添加了~~~
zhyou110z 2010-12-16
  • 打赏
  • 举报
回复



com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:921)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:997)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2670)
at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:974)
at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:84)
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at com.xinhe.db.DBpool.getConnection(DBpool.java:23)
at com.xinhe.db.SubFileCategoryDAO.<init>(SubFileCategoryDAO.java:28)
at com.xinhe.action.FileCategoryAction.<init>(FileCategoryAction.java:38)
at sun.reflect.GeneratedConstructorAccessor25.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:123)
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:154)
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:143)
at com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:113)
at com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:275)
at com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:365)
at com.opensymphony.xwork2.DefaultActionInvocation.access$000(DefaultActionInvocation.java:38)
at com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:83)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.<init>(DefaultActionInvocation.java:74)
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:189)
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:494)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:422)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)


进程数到100报异常
iihero 2010-12-16
  • 打赏
  • 举报
回复
maxIdle="50"
你的最大空闲连接数设为50了,你空闲的连接还没达到50吧。

看看下边两个参数的㮂具体含义:

removeAbandoned
false
是否清除已经超过“removeAbandonedTimout”设置的无效连接。
如果值为“true”则超过“removeAbandonedTimout”设置的无效连接将会被清除。设置此属性可以从那些没有合适关闭连接的程序中恢复数据库的连接。

removeAbandonedTimeout
300
以秒表示的清除无效连接的时限。
zhyou110z 2010-12-16
  • 打赏
  • 举报
回复


@SuppressWarnings("unchecked")
public ArrayList<FileCategory> getFileCategoryByName(String branch) {
ActionContext.getContext().getSession().put("branchAddress", branch);
// 当前浏览的地址
ArrayList<FileCategory> fclist = new ArrayList<FileCategory>();

try {
System.out.println("state :" +state);
if(state==null)
state = conn.createStatement();
String sql = "select * from filecategory where branch='" + branch
+ "'";
rs = state.executeQuery(sql);

while (rs.next()) {
FileCategory fc = new FileCategory();

fc.setId(rs.getInt("id"));
fc.setFilename(rs.getString("filename"));
fc.setCreatemenid(rs.getString("createmenid"));
fc.setCreatetime(rs.getString("createtime"));
fc.setShopname(rs.getString("shopname"));
fc.setBranch(rs.getString("branch"));

fclist.add(fc);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
System.out.println(" before rs : "+rs+" || state : "+state+ " || conn: "+conn);
rs.close();
state.close();
conn.close();
System.out.println(" closeafter rs : "+rs+" || state : "+state+ " || conn: "+conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return fclist;
}


1. 控制台输出

before rs : org.apache.tomcat.dbcp.dbcp.DelegatingResultSet@1f8bd0d || state : com.mysql.jdbc.Statement@33788d || conn: jdbc:mysql://localhost:3306/oasystem?useUnicode=true&characterEncoding=UTF-8, UserName=root@localhost, MySQL-AB JDBC Driver
closeafter rs : org.apache.tomcat.dbcp.dbcp.DelegatingResultSet@1f8bd0d || state : com.mysql.jdbc.Statement@33788d || conn: null



还是一样~~~

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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