There is no stable job outside the system.
talk is cheap, show me the code,make a better result.
目录

概述
数据库连接池是负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
需求:
连接池是常用的应用场景,连接池的工作原理主要由三部分组成,分别为
1.连接池的建立
2.连接池中连接的使用管理
3.连接池的关闭
设计思路

实现思路分析
1.连接打开
1.连接打开
连接打开意味着获取连接的过程。我们会申请连接,连接会从连接池中返回一个有效连接。
Java中提供了很多容器类可以方便的构建连接池,例如Vector、Stack等。
2.获得连接和链接管理
连接池管理策略是连接池机制的核心,连接池内连接的分配和释放对系统的性能有很大的影响。其管理策略是:
当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。
当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。
该策略保证了数据库连接的有效复用,避免频繁的建立、释放连接所带来的系统资源开销。
3.连接关闭
连接用完之后就会调用释放的方法。释放连接过程就是把连接放回连接池过程
拓展Demo实现
我们先实现一个基本的获取链接的过程:
相关代码如下:
// 获取数据库连接
public Connection getConnection() {
Connection conn = null;
lock.lock();
try {
while (pool.size() < 0) {
try {
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (!pool.isEmpty()) {
System.out.println("复用链接");
conn = pool.removeFirst();
}
System.out.println("新建链接");
return conn;
} finally {
lock.unlock();
}
}
// 释放数据库连接
public void releaseConnection(Connection conn) {
if (conn != null) {
lock.lock();
try {
// 释放连接过程就是把连接放回连接池过程
pool.addLast(conn);
condition.signal();
System.out.println("放回链接");
} finally {
lock.unlock();
}
}
}
测试代码:
public static void main(String[] args) throws ClassNotFoundException, SQLException {
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 20, 200, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<Runnable>(10));
for (int i = 0; i < 20; i++) {
AA a = new AA();
executor.execute(a);
}
}
}
class AA extends Thread {
private static final int INIT_CONNECTIONS = 10;
private static final String DRIVER_CLASS = "";
private static final String USERNAME = "root";
private static final String PASSWORD = "root";
private static final String URL = "jdbc:mysql://127.0.0.1:3306/abom";
@Override
public void run() {
try {
main pool = new main();
Connection conn = (Connection) DriverManager.getConnection(URL, USERNAME, PASSWORD);
System.out.println("得到conn: " + conn);
Thread.sleep(2000);
pool.releaseConnection(conn);
} catch (InterruptedException |SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
效果:

稳定性分析:
利用JVM工具我们可以得出如下稳定性分析:链接稳定增长较为稳定。

小结:
主要讲述了连接池相关原理和简单实现,链接策略待实现,设计上里面有许多不足,请大家指正~
参考资料和推荐阅读
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~
本文详细探讨了数据库连接池的设计思路,包括连接打开、连接管理策略和关闭过程,并通过代码示例展示了如何实现。稳定性分析部分展示了连接池在实际应用中的表现。关键词涉及数据库连接池、JDBC、连接复用、资源管理。
3368

被折叠的 条评论
为什么被折叠?



