MySQL是一個應用廣泛的關系型數據庫,它的高效性和可靠性使得它成為了眾多企業的首選。在使用MySQL時,我們一般會使用連接池技術來提高性能和可靠性。而在使用MySQL的連接池時,創建數據庫連接池是必要的一步。下面我們來學習如何使用MySQL創建數據庫連接池。
// 1. 導入相關的jar包 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Stack; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; // 2. 定義數據庫連接池 public class MySQLConnectionPool { // 驅動和數據庫地址 private final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; private final String DB_URL = "jdbc:mysql://localhost:3306/test"; // 數據庫用戶名和密碼 private final String USER_NAME = "root"; private final String PASSWORD = "123456"; // 連接池大小 private final int POOL_SIZE = 20; // 連接池對象 private static MySQLConnectionPool pool = null; // 數據庫連接池 private BlockingQueue<Connection> queue = null; // 初始化連接池 private MySQLConnectionPool() { queue = new ArrayBlockingQueue<Connection>(POOL_SIZE); for (int i = 0; i < POOL_SIZE; i++) { try { Class.forName(JDBC_DRIVER); Connection conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD); queue.offer(conn); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } // 獲取連接 public Connection getConnection() { Connection conn = null; try { conn = queue.take(); } catch (InterruptedException e) { e.printStackTrace(); } return conn; } // 釋放連接 public void releaseConnection(Connection conn) { if (null != conn) { try { queue.put(conn); } catch (InterruptedException e) { e.printStackTrace(); } } } // 單例模式獲取連接池對象 public static synchronized MySQLConnectionPool getInstance() { if (null == pool) { pool = new MySQLConnectionPool(); } return pool; } }
上述代碼使用了單例模式來保證只有一個MySQLConnectionPool對象被創建,并使用BlockingQueue作為數據庫連接池隊列。在初始化連接池時,我們使用了 loop 來從 MySQL 獲取到連接,并將其添加到連接池中。在獲取連接時,我們使用了 BlockingQueue.take() 方法來獲取連接,這將會阻塞直到連接池中有連接可用。在釋放連接時,我們使用了BlockingQueue.put()方法。這將會將連接放回到連接池中,如果連接池已滿,則該方法將會阻塞直到有連接可用。