配置:dbUser=lbserv
dbPass=hb_lbs_serv#dbUrl=jdbc:oracle:thin:@172.16.1.3:1521:lbs
dbUrl=jdbc:oracle:thin:@211.91.132.164:1521:lbs
#dbUrl=jdbc:oracle:thin:@127.0.0.1:1521:orcldbDriver=oracle.jdbc.driver.OracleDriver
initPoolSize=6
minPoolSize=5
maxPoolSize=100
maxStatements=100000
maxIdleTime=0
checkouttimeout=30000
automaticTestTable=dualacquireRetryAttempts=1validationQuery=select * from dual
不使用系统,
过一个小时左右后,就报:java.sql.SQLException: Io 异常: Connection reset
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:189)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:231)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:345)
at oracle.jdbc.driver.OracleStatement.open(OracleStatement.java:717)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2605)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:777)
at com.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)
at com.lbs.dao.impl.AuthoDaoImpl.rUserModules(AuthoDaoImpl.java:158)
at com.lbs.service.impl.UserLoginActionImpl.userLogin(UserLoginActionImpl.java:45)
at com.lbs.service.UserLoginAction.execute(UserLoginAction.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
- [c3p0] Exceptions occurred while trying to close a PooledConnection's resources normally.
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
- [c3p0] NewPooledConnection close Exception.
java.sql.SQLException: Io 异常: Connection reset by peer: socket write error
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:189)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:231)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:345)
at oracle.jdbc.driver.OracleConnection.close(OracleConnection.java:1476)
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:474)
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:191)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept得连接的方法是:
public static Connection getConnection() throws SQLException {
Connection conn = null;
try {
conn = ds.getConnection(); } catch (Exception e) {
ds.setPreferredTestQuery("select sysdate from dual");
conn = ds.getConnection();
return conn;
} return conn;
}ds就是数据源,猫启动的时候就把它初始化了。 AuthoDaoImpl.java:158 ResultSet rs = stmt.executeQuery(rsql.toString());所有的connection,statement,resultset,每次用完都在finally关闭了的。报错报的莫名其妙的!!!

解决方案 »

  1.   

    你那段代码写得就有问题,SQLException 已经捕获了,还要再抛出么?把你怎么用的代码贴出来看看
      

  2.   


    恩,这确实是个错误import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;import com.mchange.v2.c3p0.ComboPooledDataSource;public class CommonDao {
    protected static ComboPooledDataSource ds;
    public static Connection getConnection() {
    Connection conn = null;
    try {
    conn = ds.getConnection(); } catch (Exception e) {
    ds.setPreferredTestQuery("select sysdate from dual");
    try {
    conn = ds.getConnection();
    } catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    return conn;
    } return conn;
    } public ComboPooledDataSource getDs() {
    return ds;
    }
    public void setDs(ComboPooledDataSource ds) {
    this.ds = ds;
    }
    public int execUpdate(String sql) throws Exception {
    Connection conn = ds.getConnection();
    try {
    Statement stmt = conn.createStatement();
    try {
    return stmt.executeUpdate(sql);
    } finally {
    stmt.close();
    }
    } finally {
    conn.close();
    }
    }}ds在容器启动的时候就注入了值。一般的dao类就继承CommonDao,就能得到Connection; public ArrayList method() throws Exception {
    Connection conn = this.getConnection();
    try {
    StringBuilder rsql = new StringBuilder(
    "SELECT * from dual"); Statement stmt = conn.createStatement();
    try {
    ResultSet rs = stmt.executeQuery(rsql.toString());
    try {
    ArrayList<ModulesBean> beans = new ArrayList<ModulesBean>(); while (rs.next()) {
    ...... beans.add(bean);
    } return beans;
    } finally {
    rs.close(); } } finally {
    stmt.close(); } }  finally {
    conn.close();
    } }
    这种写法,不存在会有哪个资源没有关闭的问题。