zoukankan      html  css  js  c++  java
  • 13.数据库连接池

    /*使用数据库连接池优化程序性能*/ 

    一次性从数据库中拿出一定数量的连接,放到一个池子中,每次程序要拿连接的时候,从这个池子里面去拿,用完了,也是放到这个池子里,

    避免频繁的从数据库中去存取连接

    编写自己的数据库连接池

      1.实现DataSource接口 ,DataSource接口中定义了两个重载的getConnection() 方法

      2.在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中

       实现getConnection()方法,让getConnection()方法每次调用时,从LinkedList中取一个connection (remove方法) 返回给用户

      3.当用户使用完connection,调用connection.close() 方法时,connection对象应保证自己返回到LinkedList中,而不要把connection 还给数据库

      针对 “返回到LinkedList中,而不要把connection 还给数据库” 这种需要增强某个方法,有三种方式实现

        1.编写一个子类(继承Connection) 覆盖close方法 (这里不可以,因为父类的其他信息,子类并不拥有)

        2.写一个Connection包装类,增强close方法 (包装设计模式)

        3.用动态代理,返回一个代理对象出去,拦截close方法的调用,对close方法进行增强

        (不是clsoe方法,都调用invoke方法(让其调用connection自身的方法),是close方法的话,手动增强)


    /*用包装设计模式对某个对象进行增强*/

      1.写一个类,实现与被增强对象(mysql的connection)接口

      2.定义一个变量,指向被增强对象

      3.定义一个构造方法,接收被增强对象

      4.覆盖想增强的方法

      5.对于不想增强的方法,直接调用被增强对象的方法


    /*加入dbcp链接池*/

      1.导入jar包

      2.在类目录下加入dbcp的配置文件

      3.在jdbcUtils静态代码块中创建池


    /*C3P0数据库连接池*/

      1.导入jar包

      2.新建c3p0Test.java单元测试类

      3.打开c3p0的doc帮助文档

      4.选择QuickStart快速开始

      5.拷贝里边的实例代码

      6.修改各个参数

    采用配置文件配置数据源

      1.打开帮助文档

      2.找到XML文件示例

      3.在工程中新建c3p0-config.xml文件

      4.拷贝XML示例文件,修改参数 ( <property></property> )

      private static ComboPooledDataSource ds = null;
      static {

        try {

          ds = new ComboPooledDataSource("...");(如果括号为空,没有指定的话,则采用默认) 

        }

      }

    /*配置Tomcat数据源(实际上是DBCP)*/

      1.在Tomcat中加入数据库驱动软件(放在web工程中的lib 中没有用,需要放在Tomcat的lib目录下)

      2.配置context(可以在很多地方,可以修改tomcat的service.xml文件,也可以在web工程中)

      META-INF目录下,新建一个XML文件,拷贝Tomcat帮助文档中的示例代码

      3.使用JNDI获取连接对象

      Context initCtx = new InitialContext(); //初始化JNDI

      Context envCtx = (Context) initCtx.lookup("java:comp/env"); //得到JNDI容器

      DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); //从容器中检索连接池

      Connection conn = ds.getConnection();

  • 相关阅读:
    linux设备驱动第五篇:驱动中的并发与竟态
    chromium浏览器开发系列第二篇:如何编译最新chromium源码
    你所不知道的html5与html中的那些事(二)
    vim 高级使用技巧第二篇
    FFMPEG高级编程第一篇:环境搭建及编译
    android apk 防止反编译技术第一篇-加壳技术
    你所不知道的html5与html中的那些事(一)
    交通视频
    Git命令----放弃本地修改使用服务器上的代码
    IE10(去掉文本框的X)
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7359459.html
Copyright © 2011-2022 走看看