1. 程式人生 > 其它 >mybatis中連線池的實現

mybatis中連線池的實現

資料庫連線池即:
初始化多個連線,當需要獲取連線,直接從連線池中去取,而不需要經過建立連線,進行操作,關閉連線等一系列操作,當用戶量到達一定程度,連線池中的連線被用完時,程式又會自動補充獲取固定數量的連線,當用戶量減少時,程式會自動關閉多餘的連線,直到剩下最後預設初始化的幾個連線存在。
在這裡插入圖片描述
java程式碼簡單實現如下:

public class MyPool {

    private static Logger log = Logger.getLogger(MyPool.class);
    private Configuration configuration;
    private int
initCount = 10; //初始化連線數量 private int newCount = 10; //新增的數量 private int maxCount = 100; //最大連線數 private int count = 0; //當前總數量 private LinkedList<Connection> pools = new LinkedList(); //池子,用於存放連線 static{ try { Class.forName("com.mysql.jdbc.Driver"
); } catch (ClassNotFoundException e) { log.error("驅動類沒找到,請檢查依賴是否正確匯入"); e.printStackTrace(); } } public MyPool(Configuration configuration) { try { log.info("正在初始化連線池,數量為:" + initCount ); this.configuration =
configuration; for (int i = 0; i < initCount; i++) { Connection connection = createConnection(); log.debug(connection.toString()); count++; pools.add(connection); } }catch (Exception e){ e.printStackTrace(); } } /** * 建立連線 * @return */ private Connection createConnection() throws Exception { if (count>=maxCount) { throw new Exception("已達到最大連線數"); } return DriverManager.getConnection(configuration.getUrl(), configuration.getUsername(), configuration.getPassword()); } /** * 獲取連線 * @return */ public Connection getConnection() throws Exception { log.debug("連線池數量:" + pools.size() + ", 總連線數:" + count); if (pools.size()<=0) { //如果池子中沒有連線,則建立新連線 for (int i = 0; i < newCount; i++) { Connection connection = createConnection(); //將創建出來的連線放入池子中 count++; log.debug("新建連線:" +connection); pools.add(connection); } } //從池子中獲取一個連線 Connection connection = pools.getFirst(); //從池子中移除一個連線,表示該連線已經有人使用了 pools.remove(connection); return connection; } /** * 關閉連線 * @param connection */ public void close(Connection connection){ pools.add(connection); } }