我在tomcat 6 conf/context.xml 和WEB.XML都配置好了
 然后设置连接数量为100,在开发阶段一直都使用正常
 然后昨天突然报出异常,说TCP/IP 连接出现问题,最大连接数量已经到达我的源码:
1.获取DataSource 
 
  public class CacheDataSource {
private static  CacheDataSource cache;
static{
cache = new CacheDataSource();
}
private DataSource dataSource;
private CacheDataSource(){
try {
javax.naming.Context initContext = new javax.naming.InitialContext();
dataSource =(DataSource) initContext.lookup("java:/comp/env/jdbc/Conn");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
public static CacheDataSource getInstance(){
return cache;
}
public DataSource getDataSource(){
return dataSource;
}

}//2.获取连接:
public class DaoBase implements IConnection,Itranscation {
CacheDataSource ds;
Connection conn;

public DaoBase(){
try {
conn = ds.getInstance().getDataSource().getConnection();
if(conn == null){
System.out.println("null");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}



public Connection getConnection() {

return conn;
}

在编写JDBC代码的时候,连接一直都没关,我查看了资料,说连接不需要自己维护,不需要显示的关闭
tomcat会帮我们处理,请高手解答此问题

解决方案 »

  1.   

    顶楼上的,你应该在代码中设置conn.close()来关闭不用的连接
      

  2.   

    我是用的连接池哈,TOMCAT不是会帮助我管理连接吗?
    请详细说明哦
      

  3.   

    貌似你这个还是直连。。
    贴下你在XML的配置吧。。
      

  4.   

    即使用了连接池,也要记得conn.close()手工关闭。一个人测试的时候可能没问题,商用的时候并发连接稍微多一点,就可能达到连接数上限了。
      

  5.   

    是谁说“连接不需要自己维护,不需要显示的关闭 tomcat会帮我们处理”的??
    TOMCAT是神啊?你不冲水,它怎么会知道你上完厕所了没有?它怎么敢替你冲水?
      

  6.   

    tomcat管理的是datasource对象  不是你的connection对象,
    要手动的close();
      

  7.   

    而且 ls 你的代码 有。。public DaoBase(){
            try {
                conn = ds.getInstance().getDataSource().getConnection();
            if(conn == null){
                System.out.println("null");
            }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        
        
        public Connection getConnection() {
            
            return conn;
        }
    既然给外部提供了getConnection()方法 ,如果是我,会做成 private Connection  setConnection();
    不要给构造,而且 所有的connection 完全可以单例  不允许new  纯属个人意见
      

  8.   

    哦 非常感谢! 可以可以详细介绍下Datasource对象内部细节
    及Tomcat处理流程