【问题标题】:Why do we need a connection pool for a standalone application?为什么我们需要一个独立应用程序的连接池?
【发布时间】:2020-11-21 01:47:34
【问题描述】:

我需要知道为什么我们需要一个独立应用程序的连接池。据我所知,一个独立的应用程序只需要一个数据库连接实例。这就是我们在使用 JDBC 创建连接对象时使用单例模式的原因。那么独立应用程序的连接池有什么用呢?如果我使用连接池,是否需要将最大大小指定为 1?这里我尝试使用带有原生 Hibernate 的 CP30 连接池。

【问题讨论】:

  • 你能描述一下这个独立的应用程序应该做什么吗?我可以想象它可以与多个线程(工作者)一起工作,而且你肯定需要一个连接池。如果您使用 CP30 连接池,请使用默认设置,直到您意识到它不适合您。
  • 不,它只有一个用户@TraychoIvanov
  • 即使您只有一个用户,它也可能需要多次访问数据库,这意味着更好地重用池中的连接。我会推荐使用它。创建新连接是非常昂贵的操作,而使用池您可以直接获得它并减少工作量。
  • 不会重新创建连接对象,因为单例模式@TraychoIvanov
  • 好吧,在这种情况下,您必须自己管理创建、关闭连接、处理数据库连接中断等。如果您的应用程序刚刚执行并结束,那很好,否则我将使用大小为 1 的池. 如果您认为池是开销,请不要使用它:)

标签: java hibernate jdbc connection-pooling


【解决方案1】:

使用连接池的一个主要原因是它可以让您的应用程序更容易在连接出现故障时恢复。我唯一不使用连接池的情况是,如果连接停止工作,程序失败是可以接受的。一个例子可能是一个非常简单的批处理作业,它执行一个事务,运行它的作业框架会在它失败时重试它。

【讨论】:

    【解决方案2】:

    使用连接池的成本通常是微不足道的。

    您的数据访问层不需要知道它是从独立应用程序还是从多线程 Web 应用程序调用的。因此,始终使用连接池是一个很好的例子,这在第一种情况下并没有什么坏处,而在第二种情况下可能是必要的。

    【讨论】:

      【解决方案3】:

      我同意你有一个独立的应用程序,但这并不意味着你总是需要使用单例设计模式。单个应用程序如何启动多个线程并且每个线程都连接到数据库。在这种情况下,Singleton 将没有任何帮助,您应该实现连接池,您正在优雅地处理数据库操作。

      连接池和应用程序(独立或分布式)在某种程度上是相关的,但主要取决于用例。假设您正在开发一个基于独立桌面的应用程序,它是一个简单的 CRUD 应用程序,在这种情况下,我同意您不需要实现连接池,但如果我们谈论的是多用户,那太并行了,我认为我们应该始终利用连接池。

      不确定您的用例在谈论什么,但概括地说“独立应用程序,不需要连接池”并不总是正确的。

      【讨论】:

      • 所以当涉及到一个用户的独立应用程序时,我可以在没有连接池的情况下实现应用程序。暂时如果我在这种情况下使用连接池也不会没有用已经由连接池创建的多个连接对象,没有用例。我的意思是,如果我的连接池创建了 5 个实例,那么由于上述情况,4 个实例将无用。
      • “多线程应用程序需要一个连接池”也并非总是如此;)
      • @Gimby,可能并不总是正确,但我们通常会这样做,但主要我想强调的是,独立应用程序并不意味着“没有连接池”跨度>
      • 即使是单用户、单线程应用程序也可以从连接池中受益。长时间运行的用户应用程序与数据库断开连接并非不可能。使用连接池并仅获取一个工作单元的连接将允许您更优雅地处理连接故障,而不是在开始时初始化单个连接并尝试在整个应用程序运行时使用它。
      猜你喜欢
      • 2013-04-12
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 2015-01-17
      相关资源
      最近更新 更多