zoukankan      html  css  js  c++  java
  • jdbc连接池&改进dbUtil成C3P0Util

    一.jdbc连接池

        1.连接池的存在理由

              前面介绍的dbUtils工具类虽然实现了一个对jdbc的简单封装。但它依旧采取从驱动管理获取连接

             (DriverManager.getConnection(dbUrl, dbUserName, dbPassword)),释放连接的操作。非常消耗系统的资源!

             可以设计一个连接池,来获取con或者存放con

               

               而归还连接的方式不是直接close(),而是返回到连接池

            

         2.自定义一个连接池

            1.sun公司提供了一个连接池的接口(java.sql.dataSourse)

            2.自定义一个连接池,实现该接口

            3.定义一个List集合存放多个连接,从集合中存取(考虑到频繁的存取,用LinkList)

           

    public class MyDataSource implements DataSource{
        //1.创建1个容器用于存储Connection对象
        private static LinkedList<Connection> pool = new LinkedList<Connection>();
        
        //2.创建5个连接放到容器中去
        static{
            for (int i = 0; i < 5; i++) {
                Connection conn = DbUtil.getConnection();
                pool.add(conn);
            }
        }
        
        /**
         * 重写获取连接的方法
         */
        @Override
        public Connection getConnection() throws SQLException {
            Connection conn = null;
            //3.使用前先判断
            if(pool.size()==0){
                //4.池子里面没有,我们再创建一些
                for (int i = 0; i < 5; i++) {
                    conn = dbUtil.getConnection();
                    pool.add(conn);
                }
            }
            //5.从池子里面获取一个连接对象Connection
            conn = pool.remove(0);
            return conn;
        }
    
        /**
         * 归还连接对象到连接池中去
         */
        public void backConnection(Connection conn){
            pool.add(conn);
        }

         3.常见的开源数据库连接池(C3PO和DBCP,以C3P0为例)

              1.导入C3P0连接池所依赖的jar包

            

           2.编写C3PO的配置文件

            

            

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
    
        <default-config>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql:///db_</property>
            <property name="user">root</property>
            <property name="password">root</property>
            <property name="initialPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </default-config>
    
        <named-config name="my">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql:///db_</property>
            <property name="user">root</property>
            <property name="password">root</property>
        </named-config>
    
    
    </c3p0-config>

         3.实现C3P0Util工具类

          

    public class C3P0Utils {
        private static ComboPooledDataSource dataSource = new ComboPooledDataSource("my");
    
        public static DataSource getDataSource() {
            return dataSource;
        }
    
        public static Connection getConnection() {
            try {
                return dataSource.getConnection();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }

          

  • 相关阅读:
    Java多线程之监控Java线程池运行状态
    JS自学笔记02
    JS自学笔记01
    JAVA自学笔记09
    前端自学笔记07
    前端自学笔记06
    前端自学笔记05
    前端自学笔记04
    前端自学笔记03
    前端自学笔记02
  • 原文地址:https://www.cnblogs.com/goxcheer/p/8279908.html
Copyright © 2011-2022 走看看