数据库连接池_DBCP/C3P0
数据库连接池
数据库连接池负责分配,管理,释放数据库连接,允许程序重复使用现有的数据库连接,避免了频繁的创建数据库连接。
JDBC提供了DataSource接口用来与数据库建立连接并返回Connection对象。实现DataSource接口的类被称为数据源,常见的数据源有DBCP和C3P0.
DBCP数据源
使用DBCP数据源需要导入两个JAR包:
commons-dbcp.jar
是DBCP数据源的实现包。commons-pool.jar
是实现包的依赖包。
实现包中包含的两个核心的类:BasicDataSource和BasicDataSourceFactory
- BasicDataSource是DataSource接口的实现类,主要包含设置数据源对象的方法
public class DBCP01 { //通过BasicDataSource类创建数据源对象 public static DataSource dataSource = null; static{ BasicDataSource basicDataSource = new BasicDataSource(); basicDataSource.setDriverClassName("com.mysql.jdbc.Driver"); basicDataSource.setUrl("jdbc:mysql://localhost:3306/jdbc"); basicDataSource.setUsername("root"); basicDataSource.setPassword("123456"); basicDataSource.setInitialSize(5); //初始化连接数 basicDataSource.setMaxTotal(5); //最大活跃连接数(dbcp中是MaxActive,dbcp2中改为MaxTotal) dataSource = basicDataSource; } public static void main(String[] args) throws SQLException { Connection connection = dataSource.getConnection(); } }
- BasicDataSourceFactory是一个工厂方法,包含一个createDataSource()方法,通过读取配置文件的信息生成BasicDataSource对象。
a)创建dbcpconfig.properties配置文件
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbc username=root password=123456 initialSize=5 maxTotal=5
b)生成BasicDataSource对象
public class DBCP02 { //通过配置文件创建数据源对象 public static DataSource dataSource = null; static{ Properties properties = new Properties(); //创建配置文件对象 try{ // 通过类加载器找到文件路径,读配置文件 InputStream in = new DBCP02().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties"); properties.load(in); // 把文件以输入流的形式加载到配置对象中 dataSource = BasicDataSourceFactory.createDataSource(properties); //创建数据源对象 } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws SQLException { Connection connection = dataSource.getConnection(); } }
C3P0数据源
导入c3p0.jar
,可以使用ComboPooledDataSource类创建数据源对象,有两个构造方法:
ComboPooledDataSource()
创建后需要设置属性值。
public class C3P0 { public static DataSource dataSource = null; static{ ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(); try{ comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver"); comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc"); comboPooledDataSource.setUser("root"); comboPooledDataSource.setPassword("123456"); comboPooledDataSource.setInitialPoolSize(5); comboPooledDataSource.setMaxPoolSize(5); dataSource=comboPooledDataSource; } catch (PropertyVetoException e) { e.printStackTrace(); } } public static void main(String[] args) throws SQLException { Connection connection = dataSource.getConnection(); } }
- 通过配置文件创建数据源对象
a)创建c3p0-config.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property> <property name="user">root</property> <property name="password">123456</property> <property name="checkoutTimeout">30000</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> <property name="maxStatements">200</property> </default-config> <named-config name="itcast"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property> <property name="user">root</property> <property name="password">123456</property> <property name="initialPoolSize">10</property> <property name="maxPoolSize">100</property> </named-config> </c3p0-config>
配置了两套数据源<default-config>
是默认配置,<named-config name="itcast">
是自定义配置。可以创建多套自定义配置,使用时传递name值给ComboPooledDataSource即可。
b)创建C3P0数据源对象
public class C3P0 { public static DataSource dataSource = null; static{ ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("itcast"); dataSource = comboPooledDataSource; } public static void main(String[] args) throws SQLException { Connection connection = dataSource.getConnection(); } }
注意:
- 配置文件名称必须为c3p0-config.xml或者c3p0.xml,并放在项目的src根目录下。
- 当传入ComboPooledDataSource的参数为空或不存在时,使用默认方式创建数据源。
本文来自博客园,作者:独游空想家,转载请注明原文链接:https://www.cnblogs.com/linzhikai/p/16555821.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能