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);
            }
        }
    }

          

  • 相关阅读:
    DGA域名可以是色情网站域名
    使用cloudflare加速你的网站隐藏你的网站IP
    167. Two Sum II
    leetcode 563. Binary Tree Tilt
    python 多线程
    leetcode 404. Sum of Left Leaves
    leetcode 100. Same Tree
    leetcode 383. Ransom Note
    leetcode 122. Best Time to Buy and Sell Stock II
    天津Uber优步司机奖励政策(12月28日到12月29日)
  • 原文地址:https://www.cnblogs.com/goxcheer/p/8279908.html
Copyright © 2011-2022 走看看