Понедельник, 21 октября 2019

커넥션 풀 예제

25

연결 풀은 미리 연결을 만드는 작업을 수행하여 작동합니다. JDBC 연결 풀의 경우 응용 프로그램 서버가 시작될 때 연결 개체 풀이 만들어집니다. 그런 다음 이러한 개체는 클라이언트가 요청하는 대로 연결을 분산하고 클라이언트가 연결 개체로 완료됨을 판단할 때 풀에 반환하는 풀 관리자에 의해 관리됩니다. 이러한 연결을 관리하는 데 는 많은 하우스키핑이 관련되어 있습니다. 기본 크기 10의 풀을 만드는 데 도움이되는 연결 풀 유틸리티를 만들기 위해 동일한 솔루션이 있습니다. 풀에서 따뜻하게 유지할 유휴 연결 수는 응용 프로그램의 크기와 특성에 따라 다릅니다. 많은 사용자가 HTTP 요청을 처리하는 스레드당 하나의 연결이 충분하다는 것을 알게 됩니다(HTTP 요청을 처리하는 스레드가 연결을 사용하는 유일한 스레드라고 가정). 응용 프로그램에 는 연결이 새 스레드로 빠르게 넘길 수 없을 정도로 처리량이 매우 높은 경우 더 많은 것이 필요할 수 있습니다. 또는 모든 HTTP 요청이 데이터베이스에 액세스해야 하는 경우 더 적게 필요할 수 있습니다. 궁극적으로 프로덕션 로드에서 응용 프로그램을 프로파일링하는 것이 적절한 풀 매개 변수를 결정하는 가장 좋은 방법입니다.

예상대로 C3poDataSource 클래스와 풀풀된 연결을 얻는 것은 이전 예제와 유사합니다. 현재 사용 중이며 준비된 문 풀링 지원 등을 지원합니다. 간단한 단위 테스트를 만들고 풀링된 메모리 내 H2 연결을 살펴보겠습니다. 사용 가능한 모든 연결이 수행되고 현재 풀 크기가 구성된 최대값보다 작으면 메서드가 새 연결을 만듭니다: 참고: JDBC DataSource 개체 클래스의 DataDirect Connect는 비풀링을 위한 DataSource 인터페이스를 구현합니다. 풀링을 위한 커넥션풀데이터소스에 추가됩니다. 풀링이 아닌 데이터 원본을 사용하려면 «데이터 직접 데이터 원본 개체 만들기» 섹션의 예제 코드에 등록된 JNDI 이름을 사용하고 TestDataSourceApp를 실행합니다. 예를 들어 연결이 해제되면 실제로 풀로 반환되므로 다른 클라이언트가 다시 사용할 수 있습니다. 연결의 close() 메서드에 대한 명시적 호출과 같이 기본 데이터베이스와의 추가 상호 작용은 없습니다. DBCPDataSource 클래스와 풀된 연결을 얻는 방법은 다음과 같습니다. 예를 들어 풀 관리 도구를 사용하여 풀 구성을 변경하는 경우 PooledConnectionDataSource.close 메서드를 사용하여 연결 풀이 새 구성 값을 사용하여 풀을 닫고 다시 만들도록 할 수 있습니다.

JDBC 3.0 API는 특정 연결 풀링 구현을 지정하는 대신 연결 풀링을 지원하는 «후크»가 있는 일반 프레임워크를 제공합니다. 이러한 방식으로 타사 공급업체 또는 사용자는 자신의 요구에 가장 적합한 특정 캐싱 또는 풀링 알고리즘을 구현할 수 있습니다. JDBC 3.0 API는 연결 이벤트 클래스와 다음 인터페이스를 모든 연결 풀링 구현에 대한 후크로 지정합니다.