【问题标题】:When to open and close the connection to DB何时打开和关闭与 DB 的连接
【发布时间】:2016-04-20 17:04:37
【问题描述】:

我正在使用 Java EE 进行编码,并且我有一些类可以使用我的数据库管理所有操作。

我在问自己什么时候应该打开/关闭与数据库的连接。

在每种方法中打开和关闭它更好吗? 还是在构造函数中打开它并在我使用完我的类时关闭它更好?

谢谢

【问题讨论】:

  • 虽然这个问题很常见,但它太笼统了。添加一些示例,甚至是预期的场景,否则人们会将您的问题标记为“主要基于意见”......从文本中:许多好的问题会根据专家经验产生一定程度的意见,但这个问题的答案往往会几乎完全基于意见,而不是事实、参考资料或特定专业知识。

标签: sql postgresql jakarta-ee connection


【解决方案1】:

没有通用的解决方案。所有决定都取决于具体任务。你应该记住接下来的事情:

  1. 每次连接数据库都是应用时间。如果你的方法被调用太频繁,你的应用程序将浪费大量时间来连接和断开任务,以及更多的慢速网络。在很少调用的情况下,它不会那么重要;
  2. 如果您的方法在构造函数中长时间连接到数据库而没有任何操作,则可能会断开连接。这不是必需的,但可能是网络问题或数据库连接策略的原因。所以在每个查询之前都应该用select 'some random text' from dual这样的快速简单的操作来检查;
  3. 数据库资源不是无限的,连接总数是有限的。这个限制可能非常大,但它仍然存在。因此,如果您的应用程序可以并行使用数次(数百次、数千次),它可能会达到永久连接的极限。

如果您没有未来使用方法的信息,我建议使用限时永久连接。如果方法在 3-5 秒内没有通过此连接进行查询,则应使用第一个查询打开它并使用计时器关闭它。当然,任何查询者都应该在查询之前检查连接状态。打开它,如果它关闭,触摸关闭计时器。并且不要忘记在析构函数中明确关闭连接。

【讨论】:

    【解决方案2】:

    我认为您不应该在代码中管理它。我工作过的每台 EE 服务器都有连接池,以消除您关心这个的需要。基本上,您在需要时“打开”连接,并在需要时“关闭”它。这些词用引号引起来,因为连接真正打开和关闭时由池来管理。

    从设计的角度来看,只有在需要时才使用连接。对象构造没有意义——如果类中的一个方法在一个小时内没有被调用怎么办?不需要时打开它的目的是什么?所以如果一个方法需要一个连接,在方法中打开并关闭它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      相关资源
      最近更新 更多