数据库连接池的用途?

时间:2014-04-19 20:14:41

标签: java sql database connection-pooling

考虑一个简单的线程池。线程池的主要目的是重用(回收)线程以限制最大线程数并防止删除和创建线程,我是对的吗? 最近我读过(维基百科连接池),在Java EE中,数据库连接是由服务器汇总的,但我不知道为什么?
的问题:

  • 在java中汇集sql连接的主要目的是什么?
  • 是否可以汇集128个连接并保持所有连接打开?
  • 如果128个并发选择命令由一个连接或128个连接运行,有什么区别?
  • 通过连接池连接数据库的正确方法是什么?
  • 服务器和数据库如何处理连接?
  • 服务器如何重用已关闭的连接?
  • 当整个服务器组件使用共享连接时,是否仍需要池?

提前致谢。

1 个答案:

答案 0 :(得分:2)

数据库连接池解决方法与此处提到的线程池非常相似。以下是主要原因。

  • 数据库连接池的主要用途是创建一些数据库 连接并将它们保存在池中并在您的时候重用它们 应用程序代码需要对db执行查询。因为创造 连接是一项非常昂贵的操作,连接池允许我们 为了省力。
  • 完全可以创建128个连接并将它们保存在池中。
  • 一个连接上没有128个并发选择可能无法正常工作。通过连接池,您可以从中获得连接 池,并使用它来触发所需的所有查询 操作,然后将连接返回池。那么你 将需要128个连接来运行并发选择。
  • 通常,您让容器处理连接池。您可以在web.xml或容器中配置连接池 指定配置文件并将JNDI名称与数据源相关联 连接到池。然后你查找DataSource和 从那里获得连接。以下是获取的示例代码 连接。
public static Connection getConnection() {
        Connection con = null;
        try {
            Context initContext = new InitialContext();
            Context envContext = (Context) initContext.lookup("java:/comp/env");
            DataSource dataSource = (DataSource) envContext.lookup("jdbc/db");
            con = dataSource.getConnection();
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }
  • 数据库将假设连接仍处于活动状态且其连接 应用程序服务器负责保持连接 池存活(当然由用户配置)并避免 连接超时。

  • 当您的应用程序代码通过调用connection.close()请求关闭连接时,此连接未关闭并实际返回到池中,以便来自池的进一步连接请求将使用此连接。

  • 对于所有Web应用程序,强烈建议您创建连接池,否则您将遇到与之相关的问题 性能和打开的连接太多了。