现状:在我们的项目中使用了Ofbiz2.1,TransactionFactory配置为JotmFactory,数据库是Oracle9i,lifeTime设置为120000(2分钟)在大并发测试的时候发现经常Closed Connection的异常。
原因:Oracle数据库会检查physical connection的idle时间和使用次数并关闭长时间idle的physical connection,如果应用对从连接池中
获取的connection不进行检查,或者连接池仔返回可用连接之前不进行检查,在使用过程中就会Closed Connection的异常。大多数数据库都会检查physical connection的idle时间。
解决办法:调用StandardPoolDataSource或者StandardXAPoolDataSource的setCheckLevelObject(int)方法设置连接检查级别,参数取值如下:
-
0:不检查
-
1:对unlocked池中获取的连接进行Closed检查
-
2:对unlocked池中获取的连接进行sql测试,需要设置setJdbcTestStmt(Test SQL)
-
3:对所有unlocked池中的连接进行Closed检查
-
4:对所有unloked池中的连接进行测试,需要设置setJdbcTestStmt(Test SQL)