自定义连接池的问题及解决分析

1.1.1 自定义连接池的问题:
1.1.1.1 使用接口的实现类完成的构造
MyDataSource dataSource = new MyDataSource();
这种写法不方便程序的扩展。
1.1.1.2 额外提供了方法归还连接

// 归还连接:
dataSource.addBack(conn);

这种方式增加使用连接池的用户的难度。
1.1.2 自定义连接池的问题解决
如果不提供自定义的方法就可以解决这个问题,但是连接要如何归还到连接池呢?
1.1.2.1 解决分析的思路
原来在Connection中是有一个close方法的,colse方法完成了连接的销毁。能不能做一个事情,将原有的连接的close方法改为归还。
l 现在要做的事情就是将原有的close方法的逻辑改为归还。(增强一个类中的方法)。
l 如何增强一个类中的方法
n 一种:采用继承的方式:
***** 继承这种增强是最简单,但是是有使用条件的:必须能够控制这个类的构造!!!

class Man{

    public void run(){

System.out.println(“跑…”);

}

}

class SuperMan extends Man{

public void run(){

System.out.println(“飞…”);

}

}

原文地址:https://blog.51cto.com/13587708/2364712

时间: 2024-10-06 09:07:00

自定义连接池的问题及解决分析的相关文章

JAVA自定义连接池原理设计(一)

一,概述 本人认为在开发过程中,需要挑战更高的阶段和更优的代码,虽然在真正开发工作中,代码质量和按时交付项目功能相比总是无足轻重.但是个人认为开发是一条任重而道远的路.现在本人在网上找到一个自定义连接池的代码,分享给大家.无论是线程池还是db连接池,他们都有一个共同的特征:资源复用,在普通的场景中,我们使用一个连接,它的生命周期可能是这样的: 一个连接,从创建完毕到销毁,期间只被使用一次,当周期结束之后,另外的调用者仍然需要这个连接去做事,就要重复去经历这种生命周期.因为创建和销毁都是需要对应服

自定义连接池(装饰者模式)

连接池概述: 管理数据库的连接, 作用: 提高项目的性能. 就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可. 所有的连接池必须实现一个接口 javax.sql.DataSource接口 获取连接方法: Connection getConnection() 归还连接的方法就是以前的释放资源的方法.调用connection.close(); 增强方法: 1.继承 2.装饰者模式(静态代理) 3.动态代理 装饰者模式: 使用步骤: 1.装饰者和被装饰者实现同一

JDBC自定义连接池

最近学习了JDBC的相关知识,写一下自定义连接池 一些说明: 本代码参考了部分别人的代码!!! JDBCCon类具体创建了连接: MyConnection类集成了Connection类用来管理连接与池,其中的close方法必须pool.add(): MyDataSource则是具体实现连接池. 具体步骤: 1.导mysql的jar包 2.配置db.propertites 1 driver = com.mysql.cj.jdbc.Driver 2 url = jdbc:mysql://localh

java自定义连接池

1.java自定义连接池 1.1连接池的概念: 实际开发中"获取连接"或"释放资源"是非常消耗系统资源的两个过程,为了姐姐此类性能问题,通常情况我们采用连接池技术来贡献连接Connection 用池来管理Connection,这样可以重复使用Connection,有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象,当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection

JAVA:当数据库重启后连接池没有自动识别的解决办法

今天发现服务器上的一个服务程序出现问题,软件抛出:Connection reset by peer: socket write error 无法正常提供服务,找了一下原因,原来是因为数据库服务器重启,连接池里的数据库连接connection无法创建新的Statement,导致无法提供正常服务. 到百度搜索了一下,看到一篇文章与我遇到的问题类似,解决办法虽然看上去不是很好的办法,但也实用: 解决思路:在使用前创建一个Statement,如果抛出异常,说明connection已断开,重新连接. if

数据库连接池原理详解与自定义连接池实现

实现原理 数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数制约.无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量.连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中. 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象.使

自定义连接池的问题解决代码实现

1.1.1 使用装饰者模式增强Connection中的close方法为了简化编程,提供一个模板类(模板类原封不动的将接口中的所有方法都实现,但是都没有增强).编写一个装饰类继承模板类.在装饰类中只需要增强某一个方法即可.1.1.1.1 代码实现1.1.1.2 测试代码l 改写连接池 public class MyDataSource implements DataSource { // 将一些连接存入到内存中,可以定义一个集合,用于存储连接对象. private List<Connection>

自定义连接池

步骤: 创建: 如果想在类加载的时候就创建几个Connection,就需要用到静态代码块 创建Connection之后要找一个容器来存放,所以用到了集合 因为存取操作多,所以选择了,存取快查找慢的LinkedList集合 将固定数量的Connection加入到LinkedList集合中 获取: 写一个方法叫做getConnection,用来获取Connection 在方法中,如果要取一个Connection,首先要判断容器里是否还有Connection 所以用到了LinkedList的方法isE

IIS应用程序池相关问题及连接池已满的解决方法

        关于应用程序池 在 IIS 6.0 中,引入了应用程序池,应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置.因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响.有了应用程序池,就可以使用被隔离的进程来运行 Web 应用程序.每个应用程序池在服务器上都具有唯一的凭据,因此您可以识别出哪些应用程序在执行哪些操作.如果一个应用程序失败,它不会影响在同时运行的其他应用程序.