首页 > 编程笔记 > Java笔记

使用享元模式实现数据库连接池

在实际应用开发中,特别是在 WEB 应用系统中,如果 JSP、Servlet 或 EJB 使用 JDBC 直接访问数据库中的数据,那么每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤。而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。

为了提高数据库性能,我们经常使用数据库连接池技术。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic、WebSphere、JBoss)中,基本都提供了这项技术。

数据库连接池技术的思想非常简单,只需要将数据库连接作为对象存储在一个 Vector 对象中。将 Connection 对象在调用前创建好并缓存起来,在用的时候直接从缓存中取值,用完后再放回去,达到资源重复利用的目的。一旦数据库建立连接后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,就可以克服上述缺点,极大地节省系统资源和时间。

下面使用享元模式来实现数据库连接池,代码如下:
public class ConnectionPool {

    private Vector<Connection> pool;
    private String url = "jdbc:mysql://localhost:3306/test";
    private String username = "root";
    private String password = "root";
    private String driverClassName = "com.mysql.jdbc.Driver";
    private int poolSize = 100;

    public ConnectionPool() {
        pool = new Vector<Connection>(poolSize);
        try {
            Class.forName(driverClassName);
            for (int i = 0; i < poolSize; i++) {
                Connection conn = DriverManager.getConnection(url, username, password);
                pool.add(conn);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public synchronized Connection getConnection() {
        if (pool.size() > 0) {
            Connection conn = pool.get(0);
            pool.remove(conn);
            return conn;
        }
        return null;
    }

    public synchronized void release(Connection conn) {
        pool.add(conn);
    }
}
这样的连接池普遍应用于开源框架,可以有效的提升底层的运行性能。

所有教程

优秀文章