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

    连接池

      - 就是将Connection对象放入list中,反复重用。

      - 连接池的初始化:

        - 事先放入多个对象。

      - 从连接池中取连接对象

        - 如果池中有可用连接,则将池中最后一个返回,同时,将该连接从池中remove,表示正在使用。

        - 如果池中没有可用连接,则创建一个新的。

      - 关闭连接

        - 并不是真正的关闭连接,而是将用完的连接放入池中。

    市场上常用的连接池产品

      - DBCP

      - c3p0

      - proxool

    package com.yf.sorm.pool;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.yf.sorm.core.DBManager;
    
    /**
     * 连接池的类
     * @author yangf
     *
     */
    public class DBConnectionPool {
        
        /**
         * 连接池对象
         */
        private static List<Connection> pool;
        
        /**
         * 最大连接数
         */
        private static final int POOL_MAX_SIZE = DBManager.getConf().getPoolMaxSize();
        
        /**
         * 最小连接数
         */
        private static final int POOL_MIN_SIZE = DBManager.getConf().getPoolMinSize();
        
        /**
         * 初始化连接池,使池中的连接数达到最小值
         */
        public void initPool() {
            
            if(pool == null) {
                pool = new ArrayList<Connection>();
            }
            
            while(pool.size() < DBConnectionPool.POOL_MIN_SIZE) {
                pool.add(DBManager.createConnection());
            }
        }
        
        /**
         * 从连接池中取出一个连接
         * @return 取出的连接
         */
        public synchronized Connection getConnection() {
            // 获取最后一个连接的索引
            int last_index = pool.size() - 1;
            Connection connection = pool.get(last_index);
            pool.remove(last_index);
            return connection;
        }
        
        /**
         * 将连接放回池中
         * @param conn 连接
         */
        public synchronized void close(Connection conn) {
            if(pool.size() >= DBConnectionPool.POOL_MAX_SIZE) {
                try {
                    if(conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            } else {
                pool.add(conn);
            }
        }
        
        public DBConnectionPool() {
            initPool();
        }
    }
  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/yangfanasp/p/6896160.html
Copyright © 2011-2022 走看看