数据库连接池,用池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。这个池要等到Web服务器停止,或应用程序彻底结束时,才会直正销毁。池销毁之前,池会让池中每个Connection对象调用close()方法来关闭自己。
编写标准的数据源
自定义数据库连接池要实现javax.sql.DataSource接口,一般都叫数据源。市场上流行的JDBC数据库连接池实现:
1.DBCP(早期) 2.C3P0(今)DBCP
DBCP:Apache推出的Database Connection Pool
使用步骤: 1、添加jar包 commons-dbcp-1.4.jar commons-pool-1.5.6.jar commons-collections.jar mysql-connector-java-5.1.7-bin.jar 2、添加属性资源文件 3、编写数据源工具类/** * DBCP数据库连接池的使用 */public class Demo01 { private static BasicDataSource basicDataSource = new BasicDataSource(); static{ //设置数据库连接池基本属性 basicDataSource.setDriverClassName("com.mysql.jdbc.Driver"); basicDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/jdbc"); basicDataSource.setUsername("root"); basicDataSource.setPassword("123"); //设置数据库连接池扩展属性 basicDataSource.setInitialSize(10); basicDataSource.setMaxActive(10); basicDataSource.setMaxIdle(5); } /** * 获取数据库连接 */ public Connection getConnection() throws SQLException{ try { return basicDataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); throw e; } }}复制代码
DBCP的配置:
//基本配置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbc username=root password=root//初始化池大小,即一开始池中就会有10个连接对象,默认值为0
initialSize=0//最大连接数
maxActive=8//最大空闲连接
maxIdle=8//最小空闲连接,默认值为0
minIdle=0//最大等待时间,默认值为-1,表示无限期等待,不会抛出异常。
maxWait=-1//连接的默认提交方式,默认值为true
defaultAutoCommit=true//连接是否为只读连接,如果没有指定这个属性值,那么是否为只读连接,这就由驱动自己来决定了。即Connection的实现类自己来决定!
defaultReadOnly=true//指定事务的事务隔离级别
可选值:NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE 如果没有指定,那么由驱动中的Connection实现类自己来决定 defaultTransactionIsolation=REPEATABLE_READC3P0
C3P0也是开源免费的连接池!实现类:ComboPooledDataSource
使用步骤: 1、添加jar包,导入 c3p0-0.9.1.2.jar mysql-connector-java-5.1.7-bin.jar 2、编写配置文件c3p0-config.xml,c3p0的配置文件名必须为c3p0-config.xml,并且必须放在src路径下。 3、编写工具类/** * C3P0数据库连接池的使用方式 */public class Demo{ /** * 自动加载/src/c3p0-config.xml文件 */ private static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("oracle-config"); /** * 获取数据库连接 */ public Connection getConnection() throws SQLException{ try { return comboPooledDataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); throw e; } }}复制代码
欢迎阅读上海尚学堂《》,获得更多有关JDBC数据库连接池相关知识信息。