首先创建一个配置文件driver.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydemo
username=root
password=password
init=10
maxsize=20
maxwait=500
validationQuery=select 1
public class NormalLinkedPool {public static Connection getConnection() {return Pool.getConnection();}public static void destory(Connection connection) {Pool.destoryConnection(connection);}private static class Pool {private static String DRIVER;private static String URL;private static String USERNAME;private static String PASSWORD;private static int INIT;private static int MAXSIZE;private static Long MAXWAIT;private static String VALIDATIONQUERY;//创建连接创建对象private static List<ConnectionEntity> pools = new ArrayList<>();static {//读取属性文件获得配置loadProperties();for (int i = 0; i <= INIT; i++) {pools.add(buildConnection());}}private static void loadProperties() {try {String path = URLDecoder.decode(NormalLinkedPool.class.getResource("/driver.properties").getPath(), "utf-8");Properties pop = new Properties();pop.load(new FileInputStream(path));DRIVER = pop.getProperty("driver");URL = pop.getProperty("url");USERNAME = pop.getProperty("username");PASSWORD = pop.getProperty("password");INIT = Integer.parseInt(pop.getProperty("init"));MAXSIZE = Integer.parseInt(pop.getProperty("maxsize"));MAXWAIT = Long.parseLong(pop.getProperty("maxwait"));VALIDATIONQUERY = pop.getProperty("validationQuery");} catch (IOException e) {e.printStackTrace();}}//创建连接private static ConnectionEntity buildConnection() {//System.out.println("连接池当前连接数:=============================>"+pools.size());Connection con = null;try {Class.forName(DRIVER);con = DriverManager.getConnection(URL, USERNAME, PASSWORD);} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}return ConnectionEntity.builder().conn(con).build();}//用户获取连接方法public static Connection getConnection() {//在pools里面先查询是否有空闲的连接,如果有就直接发送给用户for (ConnectionEntity connectionEntity : pools) {if (!connectionEntity.isBusy()) {connectionEntity.setBusy(true);return connectionEntity.getConn();}}//如果在上一步中发现没有空闲连接,就用当前的连接个数和最大连接个数比较如果当前连接小于//最大连接数,就新创建一个连接发送给用户,并把链接设置为忙并存放在pool中if (pools.size() < MAXSIZE) {ConnectionEntity conn = buildConnection();conn.setBusy(true);pools.add(conn);return conn.getConn();}//如果没有空线连接,并且连接数已达上限,则用户等待try {Thread.sleep(MAXWAIT);} catch (InterruptedException e) {e.printStackTrace();}return getConnection();}//用户释放连接方法public static void destoryConnection(Connection connection) {//找到用户连接是否良好try {PreparedStatement pstat = connection.prepareStatement(VALIDATIONQUERY);pstat.executeQuery();//如果没有出现异常就继续下一步工作 将用户归还的连接设置空闲for (ConnectionEntity connectionEntity : pools) {if (connectionEntity.getConn() == connection) {connectionEntity.setBusy(false);}}} catch (SQLException e) {//出现异常移除连接for (ConnectionEntity connectionEntity : pools) {if (connectionEntity.getConn() == connection) {pools.remove(connectionEntity);break;}}}}}

构建JDBC的连接池Pool相关推荐

  1. java连接池域名切换_java - 使用JDBC的连接池选项:DBCP与C3P0

    java - 使用JDBC的连接池选项:DBCP与C3P0 什么是可用于Java / JDBC的最佳连接池库? 我正在考虑2个主要候选人(免费/开源): Apache DBCP - [http://c ...

  2. JDBC通过连接池链接数据库总是失败的解决办法

    应用服务器:glassfish JDBC通过连接池链接数据库总是失败,通过查看日志,发现是APACHE报DHCP 错误, 只需要通过访问4848端口的管理程序,重新PING下JDBC当前连接池即可.

  3. JDBC数据源连接池(1)---DBCP

    何为数据源呢?也就是数据的来源.我在前面的一篇文章<JDBC原生数据库连接>中,采用了mysql数据库,数据来源于mysql,那么mysql就是一种数据源.在实际工作中,除了mysql,往 ...

  4. mysql,jdbc、连接池

    show processlist; select * from information_schema.processlist; Command:The type of command the thre ...

  5. 操作数据库方法总结1——JDBC、连接池与JDBCTemplate

    本篇文章更好的阅读体验请见笔者的个人博客 引言 最近一直在操作数据库,然后就发现自己竟然只是会用Mybatis,知道JDBCTemplate,对于为什么要用它们以及它们的出现都是为了解决什么情景只能磕 ...

  6. 2011级-csdn-java-张侃— JDBC开发—连接池(一)

    l      应用程序直接获取链接的缺点 l      缺点:用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需 ...

  7. mysql jdbc存放位置_mysql,jdbc、连接池

    在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节. 1byte=8bit 1byte就是1B 1KB=1024B free -m Mem"后的total ...

  8. 2011级-csdn-java-张侃— JDBC开发—连接池(二)

    l 配置Tomcat数据源 示例代码: context.xml <Context> <Resource name="jdbc/testDB" auth=" ...

  9. 大数据笔记16—java基础篇12(JDBC 、连接池、事务)

    目录 JDBC jdbc概述 jdbc入门案例 API详解 jdbc工具类 预编译执行平台 1.SQL注入问题(安全问题) 2API详解:预处理对象(PreparedStatement) 使用连接池重 ...

最新文章

  1. 使用WinPcap和libpcap类库读写pcap文件(001)开发环境配置
  2. 干货 | 一文搞懂极大似然估计
  3. Windows phone 7更新已经支持复制/粘贴[有图有真相]
  4. 13.MATLAB的while、for、break、continue循环操作
  5. Shell脚本详细介绍
  6. java语法特点是什么意思_java的语法是什么意思
  7. 在zabbix web上进行监控主机配置
  8. 计算机用户的特点,计算机应用基础 Windows的主要特点
  9. 一次针对EduSrc的挖掘
  10. Linux下samba服务的错误处理
  11. Istio Pilot 源码分析(二)
  12. 智慧物业小程序_刷脸支付+电商小程序+智慧酒店营销方案
  13. SVM(1)-概念与理解
  14. 产品体系建模工具软件
  15. 利用Cramer法则求具有唯一解的方程组的解
  16. 小程序页面跳转的几种方式
  17. 大芒果mysql下载_魔兽世界大芒果单机版下载|单机魔兽世界大芒果下载v3.3.5 安卓版_ 2265游戏网...
  18. 《Java SE实战指南》10:特性修饰符
  19. JPA @PersistenceContext和@Transactional Annotation
  20. idea中git版本回退

热门文章

  1. Qredo 销毁 4000 万个通证,铸造验证者 NFT
  2. 网络安全比赛知识点梳理小记
  3. jfif怎么改成jpg?
  4. 开启/去掉WIN7开机时选择用户登陆界面
  5. python 苹果试玩_python实现吃苹果小游戏
  6. 用xpath出现Element 一堆字符怎么办? python
  7. 为知更新Android下一个apk安装多个程序入口图标
  8. 【数据分发服务DDS】软件定义汽车【二】- 面向服务的架构设计
  9. 如何提升数据敏感度、数据分析思维、数据分析能力?
  10. 出院小结识别——在线OCR识别测试链接及效果