package jef.database.pooltest; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.sql.DataSource; import jef.database.DbCfg; import jef.database.DbUtils; import jef.database.innerpool.IConnection; import jef.database.innerpool.IUserManagedPool; import jef.database.innerpool.PoolService; import jef.tools.JefConfiguration; import org.easyframe.enterprise.spring.TransactionMode; import org.junit.Ignore; import org.slf4j.LoggerFactory; /** * @author guokui * */ public class Conn606MinMaxSame { static org.slf4j.Logger log=LoggerFactory.getLogger(JefConfiguration.class); private int maxSize; private int minSize; private String dbType; private String dbHost; private String dbPort; private String dbName; private String dbUser; private String dbPasswd; private String dbUrl; private String dbTypeNoMode; public Conn606MinMaxSame() { this.maxSize = JefConfiguration.getInt( DbCfg.DB_CONNECTION_POOL_MAX, 50); this.minSize = JefConfiguration.getInt(DbCfg.DB_CONNECTION_POOL,3); this.dbType = JefConfiguration.get(DbCfg.DB_TYPE); if (dbType.indexOf(':') > 0) { this.dbTypeNoMode = dbType.substring(0, dbType.indexOf(':')); } else { this.dbTypeNoMode = dbType; } this.dbHost = JefConfiguration.get(DbCfg.DB_HOST); this.dbPort = JefConfiguration.get(DbCfg.DB_PORT); this.dbName = JefConfiguration.get(DbCfg.DB_NAME); this.dbUser = JefConfiguration.get(DbCfg.DB_USER); this.dbPasswd = JefConfiguration.get(DbCfg.DB_PASSWORD); this.dbUrl = "jdbc" + ":" + dbType + ":@" + dbHost + ":" + dbPort + ":" + dbName; log.info("The database url: "+dbUrl); } /* * 测试MIN与MAX的值相同时是否正常运行 */ // @Test @Ignore public void case606() throws SQLException { log.info("Case606:连接池的最小和最大连接数被设置成相同的数值的情况下,能正常工作"); log.info("The current size of MIN is "+minSize); log.info("The current size of MAX is "+maxSize); log.info("Oracle 测试用户:"+dbUser); DataSource ds = DbUtils.createSimpleDataSource(dbUrl, dbUser, dbPasswd); final IUserManagedPool pool = PoolService.getPool(ds, maxSize,maxSize,TransactionMode.JPA); // pool. for (int i = 0; i < 15; i++) { new MyThread(pool).start(); } try { log.info("主线程需要睡眠5sec,使得其它线程有运行的时间"); Thread.sleep(5000); System.exit(0); } catch (InterruptedException e) { log.error(e.getMessage()); System.exit(1); }finally{ System.exit(1); } } static class MyThread extends Thread { private IUserManagedPool pool; public MyThread(IUserManagedPool cPool) { this.pool = cPool; } @Override public void run() { IConnection cInPool = null; try { cInPool = pool.poll(); } catch (SQLException e1) { log.error(e1.getMessage()); System.exit(1); } try { // lPools.add(pool.getConnection()); PreparedStatement ps = cInPool.prepareStatement( "select * from EMP where ename ='BLAKE'"); ResultSet rSet = ps.executeQuery(); while (rSet.next()) { log.info("正在执行select语句做查询: "+rSet.getString("ENAME")); } // pool.releaseConnection(); log.info(Thread.currentThread().getName() + "当前连接池数量:" + pool.getStatus()); } catch (SQLException e) { log.error(e.getMessage()); System.exit(1); } while(true); } } }