찾다

 >  Q&A  >  본문

동일한 JDBC 연결을 사용하여 Spring Boot REST API를 여러 번 호출하는 경우

<p>Java/Spring Boot로 작성되었으며 Tomcat 9에서 실행되는 REST 웹 서비스가 있습니다. </p> <p>한 웹 서비스 호출에서 MySQL 임시 테이블을 생성하고 다른 서비스 호출에서 해당 테이블에 액세스해야 합니다. 임시 테이블은 연결 범위이므로 첫 번째 호출에서 테이블을 생성할 때와 두 번째 호출의 "select" 쿼리에서 사용한 것과 동일한 연결을 사용해야 합니다. </p> <p>문제는 Tomcat이 연결 풀에서 JDBC 연결을 관리한다는 것입니다. 두 번째 서비스 호출에서는 JDBC 연결 수에 관계없이 연결 풀에서 하나의 연결을 선택할 수 있습니다. 이 경우 임시 테이블은 표시되지 않습니다. </p> <p>내 질문은: 연결 풀에서 동일한 연결을 어떻게 선택할 수 있습니까? 이를 구별하는 어떤 종류의 로고/라벨이 있습니까? </p>
P粉769045426P粉769045426461일 전576

모든 응답(1)나는 대답할 것이다

  • P粉277464743

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

    후속 요청에서 "동일한" 연결이 사용되도록 보장할 수 있더라도 풀에서 연결을 할당하는 과정에는 세션 상태와 관련된 항목을 재설정하는 작업이 포함되므로 이는 도움이 되지 않습니다.

    이것은 의도된 것이며 좋은 점입니다. 그렇지 않으면 한 데이터베이스 세션에서 관련되지 않은 다른 세션으로 개인 데이터가 유출될 수 있기 때문입니다. 예를 들어, 한 사용자가 일부 중요한 데이터를 임시 테이블에 저장한 후 다른 사용자의 데이터베이스 세션이 해당 임시 테이블을 읽을 수 있는 경우 이는 문제가 될 수 있습니다. 미해결 트랜잭션, 세션 변수 및 연결 문자 집합에도 동일하게 적용됩니다. 풀에서 연결이 할당되면 이들 모두가 재설정됩니다.

    따라서 임시 테이블을 사용하는 경우 연결이 사용된 후 삭제되므로 동일한 요청 중에만 사용해야 합니다.

    다음 요청에서 이전 요청의 데이터를 사용해야 하는 경우 다음을 수행할 수 있습니다.

    • 임시가 아닌 테이블에 데이터를 저장합니다.
    • 데이터를 캐시에 저장합니다.
    • 요청 외부에서 임시 테이블을 생성하고 사용할 수 있도록 데이터를 처리하는 Java 백그라운드 서비스를 작성하세요. 이는 간단한 웹 애플리케이션에 비해 작업이 더 많고 너무 복잡할 수 있지만 일부 서비스에서는 이것이 최적의 솔루션입니다.

    회신하다
    0
  • 취소회신하다