带你手写一个数据库连接池 您所在的位置:网站首页 手写一个数据库怎么写 带你手写一个数据库连接池

带你手写一个数据库连接池

2024-07-14 21:04| 来源: 网络整理| 查看: 265

1.定义一个连接池接口

import java.sql.Connection; /** * 数据库连接池接口 */ public interface DbPool { /** * 连接池初始化 */ void init(); /** * 获取一个连接 * * @return */ Connection getConnection(); /** * 释放一个连接 * * @param connection */ void releaseConnection(Connection connection); /** * 销毁连接池 */ void destroy(); }

 

2.定义一个连接池的实现

import org.springframework.scheduling.annotation.Scheduled; import java.sql.Connection; import java.sql.SQLException; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; /** * 数据库连接池实现 */ public class DbPoolImpl implements DbPool { /** * 空闲连接池 */ private LinkedBlockingQueue idleConnectPool; /** * 活跃连接池 */ private LinkedBlockingQueue busyConnectPool; /** * 当前正在被使用的连接数 */ private AtomicInteger activeSize = new AtomicInteger(0); /** * 最大连接数 */ private final int maxSize; public DbPoolImpl(int maxSize) { this.maxSize = maxSize; init();// init pool } /** * 连接池初始化 */ @Override public void init() { idleConnectPool = new LinkedBlockingQueue(); busyConnectPool = new LinkedBlockingQueue(); } /** * 获取一个连接 * * @return */ @Override public Connection getConnection() { // 从idle池中取出一个连接 Connection connection = idleConnectPool.poll(); if (connection != null) { // 如果有连接,则放入busy池中 busyConnectPool.offer(connection); System.out.println("获取到连接"); return connection; } // synchronized (DbPoolImpl.class) { // 锁--效率低下 // idle池中没有连接 // 如果idle池中连接未满maxSize,就新建一个连接 if (activeSize.get()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有