jdbc_dbcp连接池和装饰者模式概述

package cn.code.demo;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbcp2.BasicDataSource;
import org.junit.Test;

/*
 * 数据库连接池
 * 池参数:
 * 初始化大小:10个
 * 最小空闲连接数:3个
 * 增量:一次创建的最小单位  5个
 * 最大空闲连接数 12个
 * 最大连接数 20个
 * 最大等待时间:1000毫秒
 * 连接池也是用四大连接参数
 * 实现的接口
 * javax.sql.DataSource接口!
 * */
public class DBCPDemo1 {
    @Test
    public void fun1(){
        /*
         * 1.创建连接池对象
         * 2.配置四大参数
         * 3.配置池参数
         * 4.得到连接对象
         * */
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb1");
        dataSource.setUsername("root");
        dataSource.setPassword("123");

        dataSource.setMaxTotal(20);
        dataSource.setMaxWaitMillis(1000);
        dataSource.setMaxIdle(3);

        Connection con =null;
        try {
            con = dataSource.getConnection();
            System.out.println(con.getClass().getName());
            /*
             * 连接池内部使用四大参数创建了链接对象,即mysql驱动提供的Connection
             * 连接池使用mysql的链接对象进行了装饰,只对close()方法进行了增强
             * 装饰之后的Connection close()方法,用来把当前链接归还给池(装饰者设计模式)
             * */
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally{
            try {
                con.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
装饰者模式:
对象增强的手段
*继承
*装饰者模式
*动态代理
被增强的对象可以切换
增强内容可以切换
---------------------
继承:
缺点:
1、增强的内容是死的,不能动
2、被增强的对象也是死的
使用继承回事类增多;
class 咖啡类{}
class 有糖咖啡 extends 咖啡{}
class 加奶咖啡 extends 咖啡{}
class 加盐咖啡 extends 咖啡{}
class 加糖加奶 extends 加奶{}
-------------------------------
装饰者模式:
1、增强的内容是死的
2、被增强的对象时任意的
class 咖啡类{}
class 有糖咖啡 extends 咖啡{}
class 加奶咖啡 extends 咖啡{}
class 加盐咖啡 extends 咖啡{}
咖啡a = new 加糖();
咖啡 b = new 加盐(a);//对a进行装饰,就是给a加盐
咖啡 c = new 加奶(b);
java io流中大量应用!、
四大家族:
1、字节:inputStream outputStream
2、字符:reader、writer
InputStream
FileInputStream:他是一个节点流,就是和一个资源绑定在一起的!文件
BufferedInputStream : 他是装饰流,创建时必须给一个底层对象,然后我不管你给我的是什么流,我都会给你它添加缓冲区!
new BuferedInputStream(new FileInputStream("c:/xxx.txt"));
ObjectInputStream(new BuferedInputStream(new FileInputStream("c:/xxx.txt")););
ByteArrayInputStream(byte[] buf);
GZIPIputStream();
--------------------
装饰用途:不知道被增强对象的具体类型时,可以使用!
1、是你还有你,一切拜托你!
class MyConnection implements Connection{
    private Connection con;
    public MyConnection(Connection con ){//通过构造器传递底层对象
        this.con=con;
    }
    //一切拜托你
    public Statement createStatement(){
        return con.createStatement();
    }
    //增强方法
    public void close(){
        把当前链接归还给池!
    }
}
Connection con = 通过四大参数创建链接对象由mysql提供
Connection con1 = new MyConnection(con);
con1.close();
时间: 2024-10-28 06:01:57

jdbc_dbcp连接池和装饰者模式概述的相关文章

DBCP连接池的使用

通过连接池(数据源)优化我们的操作. 需求: 使用jdbc的时候,没操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作. 技术分析: 连接池 连接池概述: 管理数据库的连接, 作用: 提高项目的性能. 就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可. 所有的连接池必须实现一个接口 javax.sql.DataSource接口 获取连接方法: Connection getConnection() 归还连接的方法就是以

装饰者模式 分析连接池内在执行机制

定义一个自己的连接池 获取链接对象 跟释放连接对象 用装饰者模式写一个connectionwrap类实现接口connection 对需要加强的方法进行加强eg 对close()方法进行了加强使得此connection对象的close()不是销毁链接对象而是归还连接对象,不需要加强的方法电泳原来的方法就可以 定义一个测试方法执行sql语句 此过程就是从自己定义的连接池中获取连接对象,然后获取执行者对象去操作数据库

JS设计模式之装饰者模式

装饰者模式概述 在不改变原对象的基础上,通过对其进行包装拓展(添加属性或者方法)使原有对象可以满足用户更复杂的需求 实际需求 在已有的代码基础上,为每个表单中的input默认输入框上边显示一行提示文案,当用户点击输入框时文案消失 原有代码: var telInput = document.getElementById('tel_input'); var telWarnText = document.getElementById('tel_warn_text'); input.onclick =

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

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

javaWeb_JDBC_数据库连接池概述以及dbcp连接池

JDBC_dbcp数据库连接池 1.数据库连接池概述 (1).传统的数据库操作 普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码( 得花费0.05s-1s的时间).需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接.这样的方式将会消耗大量的资源和时间. 数据库的连接资源并没有得到很好的重复利用.若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的 甚

JDBC连接池概述

Reference Source:https://www.progress.com/tutorials/jdbc/jdbc-jdbc-connection-pooling 介绍 本文档提供的信息旨在帮助开发人员为必须处理连接池的应用程序提供连接池策略. 首先, 本文档提供 jdbc 3.0 规范指定的 jdbc 连接池概述. 接下来, 它提供了一些示例, 说明如何使用 DataDirect 连接池管理器 (它随 DataDirect Connect?用于jdbc 和 DataDirect Seq

c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一、连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程

c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一.连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 DB连接池HikariCP为什么如此快 原创: DermanYuan 攻城狮DermanYuan 3月19日 1.背景介绍 我们做过的项目中,只要连接数据库,就不可避免的使用数据库连接池,而且面试的时候,数据库肯定会被问到的.说到数据库就会问到连接池,大部分的业务码工,只 原文地址:https://www.cnblogs.com/yuanjiang

【设计模式】代理模式实现连接池

1. 连接池 创建Connection的过程是非常耗时的,为了保证Conection可以重用.应该将Connection进行池管理. 使用静态工厂方法管理一个唯一的连接: /** * 用静态工厂方法管理一个唯一的可重用的连接 */ public class ConnUtils { private ConnUtils(){} private static Connection con; //在静态代码块中创建与数据库的连接 static{ try{ Class.forName("com.mysql

web java -- 连接池 -- 概述

1. 连接池的实现原理 1. 创建连接池 首先要创建一个静态的连接池.这里的"静态"是指池中的连接时在系统初始化时就分配好的,并且不能够随意关闭.Java 提供了很多容器类可用来构建连接池,例如Vector.Stack等.在系统初始化时,根据配置创建连接并放置在连接池中,以后所使用的连接都是从该连接池中获取的,这样就可以避免连接随意建立.关闭造成的开销. 2. 分配.释放策略 创建好连接池后,需要提供一套自定义的分配.创建策略以保证数据库连接的有效复用.当客户请求数据库连接时,首先看连