DBCP数据源
DBCP 是 Apache 软件基金组织下的开源连接池实现
导入maven包:
<!-- dbcp连接池 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency>
创建dbcpconfig.properties
#Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。 #连接设置 driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/testsvnb?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true username=root password=123456 # 初始化连接 initialSize=10 #最大连接数量 maxActive=50 # 最大空闲连接 maxIdle=20 # 最小空闲连接 minIdle=5 # 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 maxWait=60000 #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。 connectionProperties=useUnicode=true;characterEncoding=UTF8 #指定由连接池所创建的连接的自动提交(auto-commit)状态。 defaultAutoCommit=true #driver default 指定由连接池所创建的连接的只读(read-only)状态。 #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix) defaultReadOnly= #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。 #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE defaultTransactionIsolation=READ_UNCOMMITTED
创建JdbcUtils_DBCP :
package com.xc.jdbc.util; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; /** * @ClassName: JdbcUtils_DBCP * @Description: 数据库连接工具类*/ public class JdbcUtils_DBCP { /** * 在java中,编写数据库连接池需实现java.sql.DataSource接口,每一种数据库连接池都是DataSource接口的实现 DBCP连接池就是java.sql.DataSource接口的一个具体实现 */ private static DataSource ds = null; // 在静态代码块中创建数据库连接池 static { try { // 加载dbcpconfig.properties配置文件 InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("db/dbcpconfig.properties"); Properties prop = new Properties(); prop.load(in); // 创建数据源 ds = BasicDataSourceFactory.createDataSource(prop); } catch (Exception e) { throw new ExceptionInInitializerError(e); } } /** * @Method: getConnection * @Description: 从数据源中获取数据库连接 * * @return Connection * @throws SQLException */ public static Connection getConnection() throws SQLException { // 从数据源中获取数据库连接 return ds.getConnection(); } /** * @Method: release * @Description: 释放资源, 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象 * * @param conn * @param st * @param rs */ public static void release(Connection conn, Statement st, ResultSet rs) { if (rs != null) { try { // 关闭存储查询结果的ResultSet对象 rs.close(); } catch (Exception e) { e.printStackTrace(); } rs = null; } if (st != null) { try { // 关闭负责执行SQL命令的Statement对象 st.close(); } catch (Exception e) { e.printStackTrace(); } } if (conn != null) { try { // 将Connection连接对象还给数据库连接池 conn.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * @Method: getDataSource * @Description: 获取数据源 * * @return DataSource */ public static DataSource getDataSource() { // 从数据源中获取数据库连接 return ds; } }
创建测试类DataSourceTest:
package com.xc.jdbc.curd; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.junit.Test; import com.xc.jdbc.util.JdbcUtils_C3P0; import com.xc.jdbc.util.JdbcUtils_DBCP; public class DataSourceTest { @Test public void dbcpDataSourceTest() { Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try { // 获取数据库连接 conn = JdbcUtils_DBCP.getConnection(); String sql = "insert into test1(name) values(?)"; st = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS); st.setString(1, "gacl"); st.executeUpdate(); // 获取数据库自动生成的主键 rs = st.getGeneratedKeys(); if (rs.next()) { System.out.println(rs.getInt(1)); } } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 JdbcUtils_DBCP.release(conn, st, rs); } } }
参考文章:
https://www.cnblogs.com/xdp-gacl/p/4002804.html
《精通Spring 4.x:企业应用开发实战》10.4.1章节