搜尋

首頁  >  問答  >  主體

使用相同的JDBC連線在多次呼叫Spring Boot REST API時

<p>我有一個用Java/Spring Boot寫的REST Web服務,運行在Tomcat 9上。 </p> <p>我需要在一個Web服務呼叫中建立一個MySQL臨時表,並在另一個服務呼叫中存取它。由於臨時表是連接範圍的,所以我需要在第一個呼叫中使用建立表時使用的相同連接,在第二個呼叫中的「select」查詢中使用。 </p> <p>問題是Tomcat在連線池中管理JDBC連線。在第二個服務呼叫中,無論我建立多少個JDBC連接,都可以從連接池中選擇任何一個連接。在這種情況下,臨時表將不可見。 </p> <p>我的問題是:我如何從連線池中選擇相同的連線?是否有任何一種標識/標籤可以區分它們? </p>
P粉769045426P粉769045426463 天前580

全部回覆(1)我來回復

  • P粉277464743

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

    即使您可以確保在後續請求中使用「相同」的連接,這也無濟於事,因為從池中分配連接的一部分涉及重置與會話狀態相關的事物。

    這是有意設計的,也是一件好事,因為否則您可能會從一個資料庫會話洩漏私密資料到另一個無關的會話。例如,如果一個使用者在臨時表中儲存了一些敏感數據,然後另一個使用者的資料庫會話可以讀取該臨時表,這將是一個問題。同樣適用於未完成的事務、會話變數和連接字元集。當連接從池中分配時,所有這些都會被重置。

    因此,如果您使用臨時表,則應僅在同一請求期間使用它們,因為在使用完該連接後,它們將被刪除。

    如果您需要在下一個請求中使用上一個請求的數據,您可以:

    • 將資料儲存在非暫存表中。
    • 將資料儲存在快取中。
    • 編寫Java後台服務來處理數據,以便您可以在請求之外建立和使用臨時表。這是更多的工作,對於簡單的Web應用程式來說可能過於複雜,但在某些服務中,這是最佳解決方案。

    回覆
    0
  • 取消回覆