UFO ET IT

tomcat-dbcp 대 commons-dbcp

ufoet 2020. 11. 8. 11:38
반응형

tomcat-dbcp 대 commons-dbcp


이 두 연결 풀링 라이브러리간에 많은 혼란이있는 것 같습니다. 내가 알고 싶은 것은 어느 것이 더 낫습니까?

제가 말하고 싶은 몇 가지 사항이 있습니다. 누군가 확인해 주시겠습니까?

  1. Tomcat DBCP : tomcat / lib 디렉토리에있는 기본 tomcat-dbcp.jar를 사용합니다. 당신은 하지 않습니다 당신의 WEB-INF / lib에 평민 - dbcp.jar 또는 공유지-pool.jar 라이브러리가 필요합니다. DB 드라이버는 tomcat / lib에 있어야합니다.

  2. Tomcat DBCP 데이터 소스 클래스는 org.apache.tomcat.dbcp.dbcp.BasicDataSource. Commons DBCP 데이터 소스 클래스는 org.apache.commons.dbcp.BasicDataSource.

  3. 이 둘의 유일한 차이점은 이 블로그 에서 찾을 수 있습니다 . 정보가 정확한지 아닌지 알 수 없습니다.

  4. 공식 Tomcat 문서 에는 대부분의 클래스가 방금 이름이 바뀌고 다시 패키징되었다고 명시되어 있습니다.

그래서 질문은 : 어느 것을 사용할 것이고 어느 것이 더 낫 습니까?


Tomcat DBCP는 Apache Commons DBCP의 이름이 변경된 버전이며 내부 패키지 이름 접두사가 다릅니다.

빌드시 Tomcat은 Commons DBCP 소스 (버전은 Tomcat 버전에 따라 다름, 예를 들어 Tomcat 7.0.27은 Commons DBCP 1.4 사용)를 가져 와서 패키지 이름 교체 ( org.apache.commons-> org.apache.tomcat.dbcp)를 수행하고 결과를 tomcat-dbcp.jar.

이는 내부 Tomcat JDBC 풀이 Commons DBCP 클래스의 가능한 애플리케이션 사용과 충돌하지 않도록 수행됩니다. 이렇게하면 많은 잠재적 인 클래스 로딩 문제를 피할 수 있습니다.

편집 : "dbcp"패키지는 데이터 소스 관리에 관한 것입니다. 순수 풀 구현의 경우 Commons DBCP는 Commons Pool (package org.apache.commons.pool) 에 종속 되지만 Tomcat에서는 풀 구현이 Tomcat의 자체 JDBC 풀 (package org.apache.tomcat.jdbc.pool) 로 대체됩니다 .


이 두 연결 풀링 라이브러리간에 많은 혼란이있는 것 같습니다. 내가 알고 싶은 것은 어느 것이 더 낫습니까?

TL / DR : 이들은 동일합니다. 둘 다 사용하지 마십시오.

Tomcat-dbcp는 Tomcat 배포판에 포함 된 Apache Commons 풀의 원래 리 패키지입니다. 클래스 충돌을 피하기 위해 패키지 이름이 org.apache.tomcat.dbcp.dbcp. *로 변경되었습니다.

Tomcat 7 (2011 년 7 월 7.0.19부터 시작)에서는 "The Tomcat JDBC Connection Pool"이라는 오래된 Apache Commons 구현의 대안으로 기본 Tomcat 패키지 (tomcat-jdbc.jar의 일부로)에 추가 연결 풀이 포함되었습니다.

https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

이 기사에서는 두 가지의 차이점을 다룹니다.

http://vigilbose.blogspot.com/2009/03/apache-commons-dbcp-and-tomcat-jdbc.html

새로운 Tomcat 풀이 더 나은 이유에 대한 간략한 요약 :

  • 적극적으로 지원
  • 훨씬 작고 이해하기 쉬우 며 유지 관리하기 쉽습니다 (원본을보고 싶다면)
  • 모든 commons-dbcp 기능 지원 + "initSQL", "validationInterval", "jdbcInterceptors"등과 같은 매우 유용한 기능 추가

이전 버전의 Apache Commons DBCP (예 : 버전 1.2)는 부하가 높은 조건에서 몇 가지 불쾌한 스레드 안전성 문제가있어 이러한 종류의 사용에 적합하지 않습니다. Tomcat 사람들이 이러한 문제를 해결하기 위해 다시 작업 한 것은 놀라운 일이 아닙니다.

그러나 내 이해는 Commons DBCP 1.4가 이러한 문제를 해결한다는 것입니다. 개인적으로 확인할 수는 없지만 Tomcat 버전이 중복 될 수 있습니다.

흥미롭게도 SpringSource는 Tomcat (tc-Server)의 리 패키징 된 버전에 대해 Commons DBCP를 다시 작성했으며 이로 인해 큰 성능 이점이 있다고 주장합니다. 그러나 그들은 그것을 오픈 소스하지 않았습니다.


Tomcat 7은 계속해서 DBCP를 사용합니다. 주된 이유는 Tomcat 문서에 숨겨져있을 수 있습니다.

  • Apache Commons DBCP는 이러한 버려진 데이터베이스 연결을 추적하고 복구하도록 구성 할 수 있습니다. 복구 할 수있을뿐만 아니라 이러한 리소스를 열고 닫지 않은 코드에 대한 스택 추적도 생성합니다.

  • Tomcat jdbc-pool 라이브러리는 동시성 시나리오에서 더 빠를 수 있지만 자동으로 문을 닫고 해제 할 수 없으며 (개발자가 닫는 것을 잊은) 일부 jdbc 드라이버에서 메모리 누수가 발생할 수 있습니다.

그러나 DBCP 코드의 문제점 중 하나는 그들이 사용하는 위임 모델이며 현재 최신 버전은 JDK1.6 이하를 지원합니다. 1.7을 지원한다는 것은 클래스의 4 분의 1 이상을 변경하는 것을 의미하며, 이것이 JDBC 풀 라이브러리가 존재하게 된 이유 중 하나입니다.

참고 : 추가 조사에서 JDBC 풀에는 StatementFinalizer인터셉터를 사용하여 연결이 닫힐 때 문을 여는 방법이 있습니다 .


여기에 추가하기 만하면됩니다. 예상 한대로 흥미로운 동작을 발견했지만 이에 대한 문서를 찾을 수 없습니다.

Tomcat의 경우 Tomcat 팩토리 ( org.apache.tomcat.jdbc.pool.DataSourceFactory또는 기타 Tomcat 팩토리) 를 정의해야합니다. 그렇지 않으면 Common DBCP로 작동합니다.

공통 DBCP 특별히 톰캣 DBCP의 기본 값 사이의 차이가 있습니다 testOnBorrow( true공통 DBCP뿐만 false톰캣 DBCP의가).


다음은 commons-dbcp가 아닌 Tomcat JDBC 풀을 사용할 때의 이점 목록입니다. http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

참고 URL : https://stackoverflow.com/questions/4711943/tomcat-dbcp-vs-commons-dbcp

반응형