Java 中的连接池示例
在此页面上,您将学习如何JDBC
使用 Java 编程语言创建连接池。为了在我们的应用程序中创建连接池,Sun Microsystem 提供了一个接口 DataSource
通过使用接口 DataSource
,开发了许多第三方 API。例如。
1- Apache 已开发 BasicDataSource。
2- Mchange-cp30 供应商开发ComboPooledDataSource
。
3- Oracle WebLogic 已提供WebLogicDataSource
。
在我的示例中,我使用了 Oracle通用连接池和 Apache DBCP API。您可以从以下链接下载这些 jar 文件。
ucp.jar —————————————————点击这里
dbcp.jar ———————————————-点击这里
如果您使用 Maven,还可以在pom.xml文件中添加 DBCP 依赖项。
<dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version>
</dependency>
什么是连接池?
连接池是一种创建和维护 JDBC 连接对象的机制。
连接池用于增强应用程序的性能并在数据库上执行命令。
仅当没有可重用的连接对象时,才会创建新的连接对象。
这种技术可以提高应用程序的整体性能。
使用 Oracle UCP
本示例将帮助您使用 oracle 通用连接 API 创建连接池。
连接属性
设置数据源的连接属性。
dataSource.setConnectionFactoryClassName("oracle.jdbc.OracleDriver");
dataSource.setURL("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUser("user_name");
dataSource.setPassword("password");
设置池属性
dataSource.setInitialPoolSize(10)
– 池管理器将使用 10 个物理连接启动。
dataSource.setMinPoolSize(20)
– 池维护线程将确保有 20 个物理连接可用。
dataSource.setMaxPoolSize(50)
– 池维护线程将检查可用的物理连接不超过 50 个。
dataSource.setPropertyCycle(20)
– 池维护线程将每 20 秒唤醒并检查一次池。
dataSource.setMaxIdleTime(300)
– 池维护线程将删除超过 300 秒不活动的物理连接。
dataSource.getAvailableConnectionsCount()
– 检查可用连接的数量。
dataSource.getBorrowedConnectionsCount()
– 检查借用的连接数。
检查完整的例子。
package org.websparrow.connection;import java.sql.Connection;import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;public class OracleUCP {public static void main(String[] args) {try {PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource();// dataSource.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");dataSource.setConnectionFactoryClassName("oracle.jdbc.OracleDriver");dataSource.setURL("jdbc:oracle:thin:@localhost:1521:xe");dataSource.setUser("user_name");dataSource.setPassword("password");dataSource.setInitialPoolSize(10);dataSource.setMinPoolSize(20);dataSource.setMaxPoolSize(50);dataSource.setPropertyCycle(20);dataSource.setMaxIdleTime(300);for (int i = 1; i <= 1000; i++) {Connection conn = dataSource.getConnection();System.out.println(conn + " : " + i);int avlConnCount = dataSource.getAvailableConnectionsCount();System.out.println("Available connections: " + avlConnCount);int brwConnCount = dataSource.getBorrowedConnectionsCount();System.out.println("Borrowed connections: " + brwConnCount);conn.close();}} catch (Exception e) {e.printStackTrace();}}
}
使用 Apache DBCP
ApacheBasicDataSource
类实现了DataSource
实现连接池的接口。
创建BasicDataSource
类的对象。
BasicDataSource bds = new BasicDataSource();
连接属性
设置数据源的连接属性。
bds.setDriverClassName("oracle.jdbc.OracleDriver");
bds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
bds.setUsername("user_name");
bds.setPassword("password");
设置池属性
bds.setMaxActive(10)
- 设置可以同时分配的最大活动连接数。
bds.setMaxIdle(5)
- 设置池中可以保持空闲的最大连接数。
bds.setMaxWait(1000 * 5)
- 以毫秒为单位设置最大等待时间。
检查完整的例子。
package org.websparrow.connection;import java.sql.Connection;import org.apache.commons.dbcp.BasicDataSource;public class ApacheDBCP {public static void main(String[] args) {BasicDataSource bds = new BasicDataSource();bds.setDriverClassName("oracle.jdbc.OracleDriver");bds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");bds.setUsername("user_name");bds.setPassword("password");bds.setMaxActive(10);bds.setMaxIdle(5);bds.setMaxWait(1000 * 5);try {for (int i = 1; i <= 200; i++) {Connection conn = bds.getConnection();System.out.println(conn + " : " + i);conn.close();}} catch (Exception e) {e.printStackTrace();}}
}
参考
- 高性能 Oracle JDBC 编程
- BasicDataSource(公共 DBCP 1.4 API)
- DBCP 组件
- 连接池
- Tomcat JDBC 连接池
Java 中的连接池示例相关推荐
- 好好说说Java中的常量池之Class常量池
前言 在Java中,常量池的概念想必很多人都听说过.这也是面试中比较常考的题目之一.在Java有关的面试题中,一般习惯通过String的有关问题来考察面试者对于常量池的知识的理解,几道简单的Strin ...
- 好好说说Java中的常量池之Class常量池 1
转载自 好好说说Java中的常量池之Class常量池 在Java中,常量池的概念想必很多人都听说过.这也是面试中比较常考的题目之一.在Java有关的面试题中,一般习惯通过String的有关问题来考 ...
- 万字图文 | 学会Java中的线程池,这一篇也许就够了!
来源:一枝花算不算浪漫 线程池原理思维导图.png 前言 Java中的线程池已经不是什么神秘的技术了,相信在看的读者在项目中也都有使用过.关于线程池的文章也是数不胜数,我们站在巨人的肩膀上来再次梳理一 ...
- Java通过DBCP连接池方法实现JDBC代码案例
Java和大数据系列 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等 ...
- 四十七、面试前,必须搞懂Java中的线程池ThreadPoolExecutor(上篇)
@Author:Runsen @Date:2020/6/9 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- node mysql limit_node中mysql连接池的connectionLimit指什么,它和mysql的最小连接数和最大连接数的关系是什么?...
问题1:node中mysql连接池的connectionLimit指什么,它和mysql的最小连接数和最大连接数的关系是什么 问题2:mysql max_connections是什么,max_used ...
- node-mysql中的连接池代码学习
node-mysql是一个node.js下的mysql驱动,前段时间在处理连接池的问题上遇到了连接不释放的疑难杂症,虽已解决,但仍需总结经验避免下次重蹈覆辙.下面是node-mysql中的连接池的部分 ...
- Java中的Volatile如何工作? Java中的volatile关键字示例
如何在Java中使用Volatile关键字 在Java采访中,什么是volatile变量以及何时在Java中使用volatile变量是Java 采访中一个著名的多线程采访问题 . 尽管许多程序员都知道 ...
- Java中Jedis连接Linux上的Redis出现connect time out(解决方案)
Java中Jedis连接Linux上的Redis出现connect time out(解决方案) 参考文章: (1)Java中Jedis连接Linux上的Redis出现connect time out ...
最新文章
- 理解AngularJS中的依赖注入
- LCD控制器与帧率、刷新率的关系分析
- ICLR 2021 | 美团、上交大等:鲁棒的可微分神经网络搜索DARTS-
- grep 匹配制表符 和 换行符
- Trustdata:映客直播站稳行业第一梯队 用户粘性增长明显
- Identity和IdentityServer的区别及联系
- ecshop网站后台功能之系统管理
- slam 无人车 融合imu 后手动调整小车位姿,不受里程计影响
- 隐藏 console 窗口
- 小程序中的大道理之二
- Linux进程间通信--命名管道
- 破解XP 管理员Administrator密码
- 组装笔记本计算机,老笔记本DIY 不到100元就可改装一体机
- 医疗研讨会直播怎么做
- 我的第一个Python爬虫——谈心得
- 让你快速了解外汇EA
- 老瞎眼 pk 小鲜肉
- Ubuntu-阿里云搭建Gitlub
- 基于雷电模拟器利用python制作手游脚本 (神都夜行录,古剑奇谭木语人) (一)
- QoS(Quality of Service)服务质量【转自微信公众号开源Linux】
热门文章
- YOLOv5/v7 更换骨干网络之 GhostNet
- 基于小米8和LineageOS的Android系统开发
- STM32智能门禁连接阿里云(指纹开锁、密码开锁、刷卡开锁、手机开锁)
- 【LaTeX教程】八.Elsevier模板添加作者简介
- 最新用友U8V15.0全产品培训视频教程合集
- 2020前端系列——浏览器、HTTP
- 浪潮SA5224M4上市 这个服务器“不太冷”
- 2-3 建立简易TCP服务端、客户端【socket server/client】【socket、bind、listen、accept、send、closesocket】【conect、recv】
- uart口图片_uart接口有什么特点与功能
- 纠结了一晚上的问题---点击导航栏的一个文本链接后所有导航栏文本链接颜色都变成访问过的颜色了