package jef.database.pooltest;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.atomic.AtomicInteger;
import jef.database.innerpool.IConnection;
import jef.database.innerpool.IUserManagedPool;
import org.junit.Before;
import org.junit.Ignore;
import org.slf4j.LoggerFactory;
/**
* case607
* 测试超时重连
* 由于超时断开了但是是同一个线程,所以返回原来的连接,但是这个连接已经不能够使用。
*
* 设置jef.properties db.heartbeat.autostart=false
* 设置db连接时间为1min 线程休眠时间为4min
* @author zhaolong
*
*/
public class Conn607TimeOutTest extends AbstractTestConnection{
org.slf4j.Logger log=LoggerFactory.getLogger(Conn607TimeOutTest.class);
final AtomicInteger countException = new AtomicInteger(0);
@Before
public void prepare()
throws SQLException {
String url = ConnDBConfigUtil.getStringValue("url");
String uname = ConnDBConfigUtil.getStringValue("uname");
String pwd = ConnDBConfigUtil.getStringValue("pwd");
int POOL_SIZE=ConnDBConfigUtil.getIntValue("pool.size");
super.prepare(url, uname, pwd, POOL_SIZE);
}
// @Test
@Ignore
public void testPoolV2() throws InterruptedException{
IUserManagedPool pool=super.getPool();
consultTable(pool);
Thread.sleep(4*60*1000);
consultTable(pool);
//如果不抛异常 则说明case运行成功
if(countException.get()==0){
ConnPrintOutUtil.printSuccess(log);
}else{
ConnPrintOutUtil.printFailure(log);
}
}
private void consultTable(IUserManagedPool pool){
try{
String sql="select count(*) from DEPT";
IConnection conn=pool.poll();
PreparedStatement ps=conn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
if(rs.next()){
ConnPrintOutUtil.print(log, ConnPrintOutUtil.INFO, "rows:"+rs.getInt(1));
}
}catch (SQLException e) {
// TODO: handle exception
ConnPrintOutUtil.print(log, ConnPrintOutUtil.ERROR, "sqlException.............");
countException.incrementAndGet();
}catch (Exception e) {
// TODO: handle exception
}
}
}