配置: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关闭了的。报错报的莫名其妙的!!!
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关闭了的。报错报的莫名其妙的!!!
恩,这确实是个错误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();
} }
这种写法,不存在会有哪个资源没有关闭的问题。