线程池c3p0和dbcp2的配置初始化实例
一、c3p0
public class ConnectionManager { public static ComboPooledDataSource dataSource; static { try { dataSource = new ComboPooledDataSource(); dataSource.setUser("freeswitch"); dataSource.setPassword("freeswitch"); dataSource.setJdbcUrl("jdbc:postgresql://数据库地址:数据库端口/freeswitch"); dataSource.setDriverClass("org.postgresql.Driver"); dataSource.setInitialPoolSize(10); dataSource.setMinPoolSize(5); dataSource.setMaxPoolSize(50); dataSource.setMaxStatements(100); dataSource.setMaxIdleTime(60); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection3() { Connection conn = null; if (null != dataSource) { try { conn = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } } return conn; } }
二、dbcp2
public class DataBaseHelper { // 保证一个线程一个Connection,线程安全 private static final ThreadLocal<Connection> connHolder; // 线程池 private static final BasicDataSource dataSource; static { connHolder = new ThreadLocal<Connection>(); dataSource = new BasicDataSource(); dataSource.setDriverClassName("org.postgresql.Driver"); dataSource.setUrl("jdbc:postgresql://数据库地址:数据库端口/freeswitch"); dataSource.setUsername("freeswitch"); dataSource.setPassword("freeswitch"); /// 设置空闲和借用的连接的最大总数量,同时可以激活。 dataSource.setMaxTotal(60); // 设置初始大小 dataSource.setInitialSize(5); // 最小空闲连接 dataSource.setMinIdle(8); // 最大空闲连接 dataSource.setMaxIdle(16); // 超时等待时间毫秒 dataSource.setMaxWaitMillis(2 * 10000); // 只会发现当前连接失效,再创建一个连接供当前查询使用 dataSource.setTestOnBorrow(true); // removeAbandonedTimeout :超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180) dataSource.setRemoveAbandonedTimeout(180); // removeAbandoned :超过removeAbandonedTimeout时间后,是否进 // 行没用连接(废弃)的回收(默认为false,调整为true) // DATA_SOURCE.setRemoveAbandonedOnMaintenance(removeAbandonedOnMaintenance); dataSource.setRemoveAbandonedOnBorrow(true); // testWhileIdle dataSource.setTestOnReturn(true); // testOnReturn dataSource.setTestOnReturn(true); // setRemoveAbandonedOnMaintenance dataSource.setRemoveAbandonedOnMaintenance(true); // 记录日志 dataSource.setLogAbandoned(true); // 设置自动提交 dataSource.setDefaultAutoCommit(true); } /** * 获取数据库连接 */ public static Connection getConnection() { Connection conn = connHolder.get(); if (conn == null) { try { conn = dataSource.getConnection(); System.out.println("get connection success"); } catch (SQLException e) { System.out.println("get connection failure:" + e); } finally { connHolder.set(conn); } } return conn; } /** * 关闭数据库连接 */ public static void closeConnection() { Connection conn = connHolder.get(); if (conn != null) { try { conn.close(); System.out.println("close connection success"); } catch (SQLException e) { System.out.println("close connection failure:" + e); throw new RuntimeException(e); } finally { connHolder.remove(); } } } }
上善若水,水利万物而不争。