検索

ホームページ  >  に質問  >  本文

同じ JDBC 接続を使用して Spring Boot REST API を複数回呼び出す場合

<p>Java/Spring Boot で書かれた REST Web サービスがあり、Tomcat 9 上で実行されます。 </p> <p>ある Web サービス呼び出しで MySQL 一時テーブルを作成し、別のサービス呼び出しでそれにアクセスする必要があります。一時テーブルは接続スコープであるため、最初の呼び出しでテーブルを作成したときと、2 回目の呼び出しで「選択」クエリで使用したのと同じ接続を使用する必要があります。 </p> <p>問題は、Tomcat が接続プール内の JDBC 接続を管理することです。 2 番目のサービス呼び出しでは、作成する JDBC 接続の数に関係なく、接続プールから任意の 1 つの接続を選択できます。この場合、一時テーブルは表示されません。 </p> <p>私の質問は、接続プールから同じ接続を選択するにはどうすればよいですか?それらを区別するロゴやラベルはありますか? </p>
P粉769045426P粉769045426461日前572

全員に返信(1)返信します

  • P粉277464743

    P粉2774647432023-08-28 08:17:05

    たとえ後続のリクエストで「同じ」接続が使用されることを保証できたとしても、プールからの接続の割り当ての一部にはセッション状態に関連するもののリセットが含まれるため、これは役に立ちません。

    これは仕様によるもので、これは良いことです。そうしないと、あるデータベース セッションから無関係な別のセッションに個人データが漏洩する可能性があるからです。たとえば、あるユーザーが機密データを一時テーブルに保存し、別のユーザーのデータベース セッションがその一時テーブルを読み取ることができる場合、これは問題になります。同じことが、未処理のトランザクション、セッション変数、および接続文字セットにも当てはまります。これらはすべて、接続がプールから割り当てられるときにリセットされます。

    したがって、一時テーブルを使用する場合は、接続の使用後に削除されるため、同じリクエスト中にのみ使用する必要があります。

    前のリクエストのデータを次のリクエストで使用する必要がある場合は、次のことができます:

    • データを一時的でないテーブルに保存します。
    • データをキャッシュに保存します。
    • リクエストの外部で一時テーブルを作成して使用できるように、データを処理する Java バックグラウンド サービスを作成します。これは手間がかかり、単純な Web アプリケーションには複雑すぎる可能性がありますが、一部のサービスではこれが最良の解決策です。

    返事
    0
  • キャンセル返事