【问题标题】:Share connection pool among servlets在 servlet 之间共享连接池
【发布时间】:2014-02-20 12:39:30
【问题描述】:

我想在 servlet 之间共享一个数据库连接。

我创建了连接池,并获得了这样的 dataSource 对象

Context envContext  = (Context)context.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/limedb");

现在,我想在 servlet 之间共享这个 dataSource 对象,以便每个 servlet 都可以做

connection = dataSource.getConnection();

获得自己的连接。

实现这一目标的最佳方法是什么?我想在应用程序启动时创建池并将其存储在某个地方...

【问题讨论】:

  • ...如果 servlet 需要共享完全相同的连接,为什么还要使用池?你 - 真的 - 确定这是你想要的吗?这似乎是一个正在形成的并发地狱。
  • 那么如何让它们共享同一个连接呢?
  • 我认为存在重大误解。池已在应用程序启动期间创建并存储!使用context.lookup(),您只是获得了对它的引用……更简洁的方法是使用@Resource

标签: java servlets connection-pooling


【解决方案1】:

实际上有几种方法可以做到这一点。

  1. 您可以使用依赖注入框架来管理这些 为您连接。在幕后,它将使用对象池。
  2. 您可以创建一个单例对象来管理包含数据源的对象池。
  3. 您可以编写一个单例,其中包含为您返回连接的代码,因此您不必知道您正在使用数据源。

这完全取决于用例、您对 java 的熟悉程度、应用程序的整体设计等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 2012-01-03
    • 2023-04-04
    • 1970-01-01
    • 2016-12-09
    • 2019-12-04
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多