日期:2014-05-16 浏览次数:20447 次
最的一个项目,由原JDBC 自写getConnection 改为apache dbcp 的连接池后。开始还不到出问题,但是数据访问频繁后,出如下错误
?
严重: 获取connection失败 :data=>org.apache.commons.dbcp.BasicDataSource@1cbb5ad:error=>Cannot get a connection, pool error Timeout waiting for idle object
?
?
public class ConnectionSource { private static Log logger = LogFactory .getLog("com.java.ods.framework.jdbc.ConnectionSource"); private static BasicDataSource dataSource = null; public ConnectionSource() { } public static void init() { if (dataSource != null) { try { dataSource.close(); } catch (Exception e) { logger.error("关闭dataSource失败 :data=>" + dataSource + ":error=>" + e.getMessage()); } dataSource = null; } try { Properties p = new Properties(); p.setProperty("driverClassName", "com.mysql.jdbc.Driver"); p .setProperty( "url", "jdbc:mysql://localhost:3306/orderDishesSystem?useUnicode=true&characterEncoding=gbk"); p.setProperty("password", "mysql"); p.setProperty("username", "root"); p.setProperty("maxActive", "500"); p.setProperty("maxIdle", "100"); p.setProperty("maxWait", "1000"); p.setProperty("removeAbandoned", "false"); p.setProperty("removeAbandonedTimeout", "120"); p.setProperty("testOnBorrow", "true"); p.setProperty("logAbandoned", "true"); dataSource = (BasicDataSource) BasicDataSourceFactory .createDataSource(p); } catch (Exception e) { logger.error("产出dataSource失败 :data=>" + dataSource + ":error=>" + e.getMessage() + e); } } public static synchronized Connection getConnection() { Connection conn = null; try { if (dataSource == null) { init(); } if (dataSource != null) { conn = dataSource.getConnection(); } } catch (SQLException e) { logger.error("获取connection失败 :data=>" + dataSource + ":error=>" + e.getMessage()); } return conn; } public static void main(String[] args) { logger.info(ConnectionSource.getConnection()); } }
?
望各位指指招,小弟有礼了.
?
?