<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&amp;characterEncoding=UTF-8"/>我用的是TOMCAT6  MYSQL5.0   连接池用的是TOMCAT6 的连接池

解决方案 »

  1.   

    maxIdle="50"   
    你的最大空闲连接数设为50了,你空闲的连接还没达到50吧。看看下边两个参数的㮂具体含义:removeAbandoned
    false
    是否清除已经超过“removeAbandonedTimout”设置的无效连接。
    如果值为“true”则超过“removeAbandonedTimout”设置的无效连接将会被清除。设置此属性可以从那些没有合适关闭连接的程序中恢复数据库的连接。removeAbandonedTimeout
    300
    以秒表示的清除无效连接的时限。
      

  2.   


    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报异常
      

  3.   

    你调用完之后,close了吗?得放回池里边才行啊。
      

  4.   

    大部分关了 
    @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.我只执行这一段代码  第一调用 连接的进程数为22.以后每次再调用时 进程数加 1  原始的2个 有一个时间初始了 
     
      

  5.   

    @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还是一样~~~