首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库连接池的用途?

数据库连接池的用途?
EN

Stack Overflow用户
提问于 2014-04-19 20:14:40
回答 1查看 5.1K关注 0票数 4

考虑一个简单的线程池。线程池的主要目的是重用(回收)线程,以限制线程的最大数量,防止删除和创建线程,对吗?

最近我读到(维基百科连接池)在Java中,数据库连接是由服务器来池的,但是我不知道为什么?

问题:

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

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-20 03:32:24

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

  • db连接池的主要目的是创建一些db连接,并将它们保存在池中,并在应用程序代码需要对db执行查询时重用它们。因为创建连接是一项非常昂贵的操作,因此连接池允许我们节省这些工作。
  • 创建128个连接并将它们保存在池中是非常好的。
  • 一个连接上的128个并发选择可能不能正常工作。使用连接池,您可以从池中获取连接,并使用它触发操作所需的所有查询,然后将连接返回到池。因此,您需要128个连接才能运行并发选择。
  • 通常,您让容器处理连接池。您可以在web.xml或容器中配置连接池,指定配置文件,并将JNDI名称与连接到池的数据源关联。然后查找那个DataSource并从那里获取连接。下面是获取连接的示例代码。

公共静态连接getConnection() { Connection = null;尝试{ Context initContext =新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();}返回con;}

  • 数据库将假定连接仍然是活动的,并且它的应用服务器有责任使池中的连接保持活动(当然,通过用户的配置)并避免连接超时。
  • 当应用程序代码通过调用connection.close()请求关闭连接时,此连接不会关闭,实际上将返回到池中,以便来自池的进一步连接请求将使用此连接。
  • 对于所有web应用程序,强烈建议您创建连接池,否则会遇到与性能相关的问题,以及过多的打开连接。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23174985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档