c3p0和druid数据库连接池
2021/9/16 19:36:52
本文主要是介绍c3p0和druid数据库连接池,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
c3p0和druid数据库连接池
- 前言
- 简介
- 传统jdbc
- 啥是连接池
- 为啥要有连接池
- 怎么建立连接池
- c3p0
- 导入jar
- 配置文件
- 测试连接
- 控制台输出
- Druid
- 导入jar包
- 配置文件
- 测试连接
- 控制台输出
前言
| 编程知识点繁多,许多文章又是用专业名词来解释专业名词,对我这种小白十分不友好,今天用大白话简单整理下数据库连接池技术。
简介
传统jdbc
| java里传统连接数据库是用的jdbc,这个大大滴不好,因为要反复连接反复释放,特别浪费资源,
啥是连接池
对于重复利用的共享资源,建议使用资源池设计模式(Resource Pool),就是先在池子中放几个连接,谁用谁拿,用完放回去,就不用反复多次的连接释放了
为啥要有连接池
解决反复用jdbc连接数据库造成的资源浪费
怎么建立连接池
以下面两个例子展示
c3p0
导入jar
| 下载地址:下载地址
配置文件
| 在src下新建文件(file)c3p0-config.xml 复制下面代码改下数据源:
<c3p0-config> <!--使用默认配置读取连接池对象--> <default-config> <!--连接参数 需要改成自己的参数--> <property name="driverClass" >com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl" >jdbc:mysql://localhost:3306/oldproject?serverTimezone=GMT</property> <property name="user" >root</property> <property name="password" >123456</property> <!--连接池参数--> <property name="initialPoolSize">5</property><!--初始化数量--> <property name="maxPoolSize">10</property><!--最大数量--> <property name="checkoutTimeout">3000</property><!--超时时间--> </default-config> <!--自己命名的连接--> <name-config name="otherc3p0"> <!--连接参数--> <property name="driverClass" >com.mysql.cj.jdbc.Driver</property> <property name="jdbcurl" >jdbc:mysql://localhost:3306/zzydb</property> <property name="user" >root</property> <property name="password" >123456</property> <!--连接池参数--> <property name="initialPoolSize">5</property> <property name="maxPoolSize">8</property> <property name="checkoutTimeout">1000</property> </name-config> </c3p0-config>
测试连接
| 代码:
public class C3p0Demo1 { public static void main(String[] args) throws SQLException { /** * 创建数据库连接池对象 */ DataSource ds = new ComboPooledDataSource(); /** * 获取连接 */ Connection conn = ds.getConnection(); /** *打印连接 */ System.out.println(conn); } }
控制台输出
红色是日志信息不是报错,最后一串就是打印出来的连接,到这就已经连接上了,具体的数据操作和jdbc基本一致。
Druid
导入jar包
| 下载地址:下载地址
配置文件
| 新建druid.properties文件如下:我这里用了8版本mysql,注意时区,和c3p0配置文件基本一致
url=jdbc:mysql://localhost:3306/oldproject?serverTimezone=GMT driverClassName=com.mysql.cj.jdbc.Driver username=root password=123456 ##初始连接数,默认0 initialSize=5 #最大连接数,默认8 maxActive=10 #最小闲置数 minIdle=10 #获取连接的最大等待时间,单位毫秒 maxWait=2000 #缓存PreparedStatement,默认false poolPreparedStatements=true #缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句设置 maxOpenPreparedStatements=20
测试连接
| 代码:因为不是必须要求在src下,需要自己手动使用类加载器加载,学反射案例也用到这个
public class DruidDemo { public static void main(String[] args) throws Exception { /** * 加载配置文件 */ InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties"); Properties pro = new Properties(); pro.load(is); /** * 获取连接池对象 */ DataSource ds = DruidDataSourceFactory.createDataSource(pro); /** * 获取连接,连接次数为11次,超过配置中最大数量 */ for (int i = 0; i < 11; i++) { Connection conn = ds.getConnection(); System.out.println(i+": "+conn); } } }
控制台输出
因为配置文件中设置最大连接数量为10,而我新建11个,所以会报错,而且是前10个没问题(0-9),在生成第十一个时候,超时2秒后报错。
使用连接必须归还,close()方法在这里不再是关闭连接,而是放回连接池中!
这篇关于c3p0和druid数据库连接池的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding
- 2024-06-23AI大模型企业应用实战(15)-langchain核心组件
- 2024-06-23AI大模型企业应用实战(16)-langchain核心组件
- 2024-06-23AI 大模型企业应用实战(06)-初识LangChain
- 2024-06-19EntBot.ai: AI Website Chatbot for Product Guides and Development Doc
- 2024-06-17zero-shot-learning-definition-examples-comparison
- 2024-06-06Package Easy(基于 NSIS 的打包exe安装包工具)使用方法-icode9专业技术文章分享