0

私のLuminusアプリには次のものがあります:

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

同じ db 接続内で db に対して複数の異なる要求を実行したいと考えています。どうやってやるの?

4

1 に答える 1

1

あなたの質問から、同じ DB 接続を再利用して複数の HTTP リクエストを処理するか、JDBC API を使用して複数の関数を呼び出す単一の HTTP リクエストを再利用するかが明確ではありません (したがって、これらの JDBC 呼び出しはすべて同じ DB 接続を使用します)。

後者の場合は、with-db-connectionJDBC API を呼び出すすべての関数をラップするために使用できます。with-db-transactionすべての SQL 操作が 1 つの DB トランザクションの一部である必要がある場合にも使用できます。

前者の場合、複数の HTTP リクエストに対して同じ接続を再利用する必要がある理由はわかりませんが、HTTP は定義上ステートレスであり、複数の問題を引き起こすため、一般的なイディオムではありません。

接続をリング HTTP セッションに保存して、セッションに関連付けられたリクエストを取得し、JDBC ロジックに使用するたびに取得できるようにすることができます。

ただし、このようなソリューションには次の欠点があります。

  • 接続が不要になったときに、接続がプールに解放される (またはプールを使用しない場合は閉じられる) ことを確認する必要があります。それをどのように検出しますか?クライアントが失敗し、DB 接続をクリーンアップすることを決定したワークフローが完了しない場合はどうなりますか?
  • いくつの同時「セッション」を処理する必要がありますか? セッションごとに専用の接続を保持する多くの (数百のような) 場合、拡張できません (DB 接続は、クライアントとサーバーの両方で高価なリソースです)。
于 2016-05-24T18:33:14.560 に答える