• 数据库连接池


    数据库连接池
    1、为什么要使用数据库连接池?
    数据库创建连接通常需要消耗相对较大的资源
    数据库关闭连接也可能存在不及时的情况
    数据库资源有限,会出现连接数已经达到最大连接数或者,内存溢出等问题
    2、数据库连接池的原理的是什么?什么是数据库连接池? ---- 实现了连接重用!!
    未使用数据库连接池,DAO将从数据库直接获取连接
    使用了连接池后,会一次性创建多个连接,构成连接池,DAO将从池中获取连接
    注意事项:不需要直接通过数据库获取连接、当连接关闭时,将连接归还数据库连接池

    编写连接池
    1、LinkedList 存放了 10个Connection
    2、在获取连接时候,你可以模拟一个队列或者栈结构
    每次用户需要连接时,从池中移除一个给用户
    思考:连接都被占用了,怎么办???
    3、调用connection的close方法,只会关闭连接,不会将连接存回池中??
    修改原来Connection的close方法 ------ 对close进行扩展!
    在java中怎么把一个方法扩展?? ---- 继承覆盖、组合复用(装饰模式、代理模式)
    面向对象设计原则:5个 ---- OCP 对修改关闭,对扩展开放
    关闭时:需要将连接存回连接池!

    **代理技术、类加载器(ClassLoader)
    Apache commons 项目--> Apache Commons项目的由三部分组成:
       The Commons Proper - 一个可重用的Java组件库。(已经发布过的)
       The Commons Sandbox - Java组件开发工作区.     (正在开发的项目)
       The Commons Dormant - 当前处于非活动状态的组件库.(刚启动或者已经停止维护的项目)
       建立和维护可重用的Java组件。使用组件可以提高开发效率和质量。
    commons-beanutils
    commons-fileupload
    commons-dbcp 依赖于另一个项目 commons-pool
    commons-logging
    DBCP:Database connection pool
    在使用连接池时,配置参数的名字都是固定的
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/day11
    username=root
    password=123

    C3P0 来自于Java开源社区 (Spring、Hibernate)
    C3P0配置有多种方式
    1、直接在DataSource里面进行设置
    ComboPooledDataSource dataSource = new ComboPooledDataSource();
      // 手动设置连接参数
      dataSource.setDriverClass("com.mysql.jdbc.Driver");
      dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/day11");
      dataSource.setUser("root");
      dataSource.setPassword("123");
    2、c3p0-config.xml
     //初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 initialPoolSize
            ds.setInitialPoolSize(3);
            //连接池中保留的最大连接数。Default: 15 maxPoolSize
            ds.setMaxPoolSize(10);
            //// 连接池中保留的最小连接数。
            //ds.setMinPoolSize(1);
            //当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 acquireIncrement
            ds.setAcquireIncrement(10);
     //最大空闲时间,25000秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0  maxIdleTime
            ds.setMaxIdleTime(25000);

    配置tomcat连接池
    全局的
    1、server.xml
    2、context.xml
    具体某个应用
    3、配置自定义虚拟目录xml
    配置到<Context>内部

    配置过程
    1、<Resource>
    <Resource name="jdbc/day11" auth="Container"
                type="javax.sql.DataSource" username="root" password="123"
                driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/day11"
                maxActive="8" maxIdle="4"/>
    * name : jdbc/不动,后面那个名称可以随意
    2、驱动jar 必须放入tomcat的lib
    当你使用c3p0或者dbcp的时候,连接池仍是你自己创建的
    当使用tomcat连接池,连接池是不是由tomcat创建,tomcat创建连接的过程中需要驱动jar
    3、在你的应用程序中,获取连接 通过JNDI
    // 通过JNDI的方式,查找Tomcat的连接池
      Context initCtx = new InitialContext();
      // JNDI 进行Java资源访问时,固定编写的
      Context envCtx = (Context) initCtx.lookup("java:comp/env");
      // 查找自定义连接池
      DataSource dataSource = (DataSource) envCtx.lookup("jdbc/day11");
    **对于使用tomcat连接池,大多用在web工程里,将JNDI代码写到Servlet或者JSP中!!!!!!

    JNDI(Java Naming and Directory Interface)
    Java命名和目录接口,它对应于J2SE中的javax.naming包,

    这套API的主要作用在于:
    它可以把Java对象放在一个容器中(JNDI容器),
    并为容器中的java对象取一个名称,
    以后程序想获得Java对象,只需通过名称检索即可。

    其核心API为Context,它代表JNDI容器,
    其lookup方法为检索容器中对应名称的对象。

  • 相关阅读:
    asp.net mvc4 之Webapi之应用客户端访问服务器端
    c#设计模式-----单例模式
    ASP.NET MVC4中ViewBag、ViewData和TempData的使用和区别
    c# winform窗体间的传值
    Extjs-树 Ext.tree.TreePanel 动态加载数据
    Entity Framework(EF)(一)之database first
    MD5加密算法
    Extjs form 表单的 submit
    XML 解析错误:找不到根元素
    C语言断言
  • 原文地址:https://www.cnblogs.com/qq809306794/p/Connection.html
Copyright © 2020-2023  润新知