搜索

首页  >  问答  >  正文

使用相同的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 天前579

全部回复(1)我来回复

  • P粉277464743

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

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

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

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

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

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

    回复
    0
  • 取消回复