내 DAO에서 세션에서 트랜잭션을 생성해야하기 전에 풀을 모두 소진했는지 알고 싶기 때문에 유용합니다.Hibernate SessionFactory checkout 만드는 법 세션 열기시 c3p0에서 JDBC 커넥션?
사용자에게 시스템 과부하 (풀 고갈)에 대한 피드백을 보내고 싶지만 모든 DAO의 모든 메소드에서이 특정 예외를 포착하고 싶지는 않습니다. 저는 세션 열기가 이것을 확인하는 적절한시기라고 생각합니다.
내 DAO에서 세션에서 트랜잭션을 생성해야하기 전에 풀을 모두 소진했는지 알고 싶기 때문에 유용합니다.Hibernate SessionFactory checkout 만드는 법 세션 열기시 c3p0에서 JDBC 커넥션?
사용자에게 시스템 과부하 (풀 고갈)에 대한 피드백을 보내고 싶지만 모든 DAO의 모든 메소드에서이 특정 예외를 포착하고 싶지는 않습니다. 저는 세션 열기가 이것을 확인하는 적절한시기라고 생각합니다.
최신 버전이 데이터베이스 연결 속성이 있습니다
hibernate.connection.acquisition_mode
즉시 로 설정 될 수있다, 따라서
을 "연결이 즉시 절전 모드 세션이 그대로 인수한다 이 열리 며 Connection 은 세션이 닫힐 때까지 계속 유지되므로 ConnectionReleaseMode도 우회합니다. "
Hibernate는 가능한 한 짧은 데이터베이스 연결을 사용하는 것이 가장 좋습니다. 세션이 열렸을 때 데이터베이스 연결을 요구하면이 작업이 수행됩니다 (수행 할 수있는 쿼리가 없으며 나중에 나옵니다). 부작용은 수영장이 훨씬 빨리 소모된다는 것입니다.
c3p0은 checkoutTimeout을 사용하여 풀을 모두 사용할 때 연결을 사용할 수있게 될 때까지 대기하는 시간을 결정합니다. 기본적으로이 시간 초과는 0 (즉, 제한 시간 없음)이지만 다른 값 (예 : 50 000 밀리 초)으로 설정되고 시간 초과에 도달하면 SQLException
이 발생합니다.
트랜잭션을 시작하기 전에 checkoutTimeout
에 도달했는지 확인하기 위해 시도 할 수 있지만 항상 다른 트랜잭션이 완료되는 속도에 따라 다릅니다.
추측을 위해서는 c3p0의 JMX interface을 사용하고 연결 수 (NumConnections), 연결 사용 수 (NumBusyConnections) 및 연결 대기중인 스레드 수 (NumThreadsAwaitingCheckout)에 대한 값을 얻을 수 있습니다.
많은 통화 연결이 있고 많은 스레드가 대기중인 경우 checkoutTimeout
에 도달 할 가능성이 있지만 스트레스 테스트를 통해 정확한 숫자를 결정해야합니다. 최대 절전 모드의