0

在我的 Luminus 应用程序中,我有这个:

(defn page1 [id]
  (layout/render "page1.html" 
    {:article (db/get-single-article {:id (Integer/parseInt id)}))

我想在同一个数据库连接中对数据库执行多个不同的请求。我怎样才能做到这一点?

4

1 回答 1

1

从您的问题来看,尚不清楚您是要重用相同的数据库连接来处理多个 HTTP 请求还是使用 JDBC API 调用多个函数的单个 HTTP 请求(因此所有这些 JDBC 调用都使用相同的数据库连接)。

如果是后一种情况,您可以使用它with-db-connection来包装所有调用 JDBC API 的函数。with-db-transaction如果所有 SQL 操作都应该是一个 DB 事务的一部分,您也可以使用。

对于前一种情况,我不确定为什么您需要为多个 HTTP 请求重用相同的连接,但这不是一个常见的习惯用法,因为 HTTP 根据定义是无状态的并且会导致多个问题。

您可以将连接存储在您的环形 HTTP 会话中,以便在您获得与会话关联的请求并用于 JDBC 逻辑时获取它。

但是,这样的解决方案有以下缺点:

  • 您必须确保在不再需要连接时将连接释放到池中(或者如果您不使用池则关闭)。你将如何检测到这一点?如果客户端失败并且从未完成您决定清理数据库连接的某些工作流怎么办?
  • 您需要处理多少个并发“会话”?如果许多(如数百个)为每个会话保持专用连接将无法扩展(数据库连接在双方都是昂贵的资源:客户端和服务器)
于 2016-05-24T18:33:14.560 回答