• java实现数据库连接池


    package nju.iip.dao;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.concurrent.ConcurrentHashMap;
    
    import nju.iip.util.Config;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * 连接池类
     * 
     * @author wangqiang
     * 
     */
    public class ConnectionPool {
    
        private static final Logger logger = LoggerFactory.getLogger(ConnectionPool.class);
    
        private int max_connection = Integer.valueOf(Config.getValue("max_connection"));// 最大连接数
    
        private int min_connection = Integer.valueOf(Config.getValue("min_connection"));// 最小连接数
    
        private Map<Connection,String> connection_map;// 存放连接池的容器
    
        private static ConnectionPool connectPool;// 单例
        
        private int waitTime = 100;
    
        private ConnectionPool() {
            logger.info("创建连接池....");
            intializePool();
            logger.info("创建连接池成功....共"+connection_map.size()+"个连接");
        }
    
        /**
         * 获取连接池单例
         * 
         * @return connectPool
         */
        public static ConnectionPool getInstance() {
            if (connectPool == null) {
                synchronized (ConnectionPool.class) {
                    if (connectPool == null) {
                        connectPool = new ConnectionPool();
                    }
                }
            }
            return connectPool;
        }
    
        public void intializePool() {
            if (connection_map != null) {
                return;
            }
            connection_map = new ConcurrentHashMap<Connection,String>();
            try {
                for (int i = 0; i < min_connection; i++) {
                    connection_map.put(getNewConnection(),"free");
                }
            } catch (Exception e) {
                logger.info("intializePool error", e);
            }
        }
    
        public Connection getNewConnection() {
            Connection conn = null;
            try {
                Class.forName(Config.getValue("DBDRIVER"));
                conn = DriverManager.getConnection(Config.getValue("DBURL"), Config.getValue("DBUSER"),Config.getValue("DBPASSWORD"));
            } catch (Exception e) {
                logger.info("getNewConnection error", e);
            }
            return conn;
        }
    
        /**
         * 获取一个连接
         * @return
         */
        public  Connection getConnection() {
            Connection conn = null;
            for (Entry<Connection, String> entry : connection_map.entrySet()) {
                if (entry.getValue().equals("free")) {
                    conn = entry.getKey();
                    connection_map.put(conn,"busy");
                    break;
                }
            }
            if (conn == null) {
                if (connection_map.size() <max_connection) {
                    conn = getNewConnection();//新建一个连接
                    connection_map.put(conn,"busy");
                    logger.info("no free connection,add new connection ok!");
                } 
                else {
                    logger.info("reach max_connction!start watting...");
                    wait(waitTime);
                    conn = getConnection();
                }
            }
            return conn;
        }
        
    
        /**
         * 释放连接
         * @param myconnection
         */
        public synchronized void releaseConnection(Connection conn) {
            if(conn == null) {
                return;
            }
             try{
                 if(connection_map.containsKey(conn)) {
                     if(conn.isClosed()) {
                         connection_map.remove(connectPool);
                     }
                     else{
                         connection_map.put(conn,"free");   
                         logger.info("releaseConnection ok...");
                     }
                 } 
                 else {
                     conn.close();
                 }
             }catch(Exception e){
                 logger.info("releaseConnection error", e);
             }
         }
        
        public void wait(int waitTime) {
            try{
                Thread.sleep(waitTime);
            }catch(Exception e){
                logger.info("wait error", e);
            }
        }
    
    }
  • 相关阅读:
    IconRes提供免费高质量的Material风格android官方图标库
    android中的所谓观察者模式
    Android总结篇——Intent机制详解及示例总结
    SpringMVC注解@initbinder解决类型转换问题
    ubuntu16.04上安装tomcat7
    ImportError: No module named corsheaders
    linux 网卡
    工控机安装Ubuntu14.04
    python2安装django
    Ubuntu14.04 terminal添加右键
  • 原文地址:https://www.cnblogs.com/mrpod2g/p/4998478.html
Copyright © 2020-2023  润新知