suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Beim mehrmaligen Aufrufen der Spring Boot REST API über dieselbe JDBC-Verbindung

<p>Ich habe einen REST-Webdienst, der in Java/Spring Boot geschrieben ist und auf Tomcat 9 läuft. </p> <p>Ich muss in einem Webdienstaufruf eine temporäre MySQL-Tabelle erstellen und in einem anderen Dienstaufruf darauf zugreifen. Da die temporäre Tabelle verbindungsbezogen ist, muss ich dieselbe Verbindung verwenden, die ich beim Erstellen der Tabelle im ersten Aufruf und bei der „select“-Abfrage im zweiten Aufruf verwendet habe. </p> <p>Das Problem besteht darin, dass Tomcat JDBC-Verbindungen in einem Verbindungspool verwaltet. Beim zweiten Serviceaufruf kann ich unabhängig davon, wie viele JDBC-Verbindungen ich erstelle, eine beliebige Verbindung aus dem Verbindungspool auswählen. In diesem Fall ist die temporäre Tabelle nicht sichtbar. </p> <p>Meine Frage ist: Wie kann ich dieselbe Verbindung aus dem Verbindungspool auswählen? Gibt es ein Logo/Label, das sie unterscheidet? </p>
P粉769045426P粉769045426461 Tage vor573

Antworte allen(1)Ich werde antworten

  • P粉277464743

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

    即使您可以确保在后续请求中使用“相同”的连接,这也无济于事,因为从池中分配连接的一部分涉及重置与会话状态相关的事物。

    这是有意设计的,也是一件好事,因为否则您可能会从一个数据库会话泄漏私密数据到另一个无关的会话。例如,如果一个用户在临时表中存储了一些敏感数据,然后另一个用户的数据库会话可以读取该临时表,这将是一个问题。同样适用于未完成的事务、会话变量和连接字符集。当连接从池中分配时,所有这些都会被重置。

    因此,如果您使用临时表,应仅在同一请求期间使用它们,因为在使用完该连接后,它们将被删除。

    如果您需要在下一个请求中使用上一个请求的数据,您可以:

    • 将数据存储在非临时表中。
    • 将数据存储在缓存中。
    • 编写Java后台服务来处理数据,以便您可以在请求之外创建和使用临时表。这是更多的工作,对于简单的Web应用程序来说可能过于复杂,但在某些服务中,这是最佳解决方案。

    Antwort
    0
  • StornierenAntwort