자주 사용 하 는 자바 데이터베이스 연결 풀(소결)
여기 서 데이터베이스 연결 이란 네트워크 프로 토 콜 과 데이터베이스 서비스 간 에 만들어 진 TCP 연결 을 말한다.일반적으로 데이터베이스 서비스 와 통신 하 는 네트워크 프로 토 콜 은 응용 프로그램 자체 에 의 해 이 루어 지지 않 아 도 된다.그 이 유 는 세 가지 가 있다.
1.복잡 도 를 실현 하려 면 해당 하 는 통신 협 의 를 충분히 이해 하고 파악 해 야 한다.
2.코드 를 재 활용 하기 어렵 고 모든 응용 프로그램 은 대응 하 는 네트워크 프로 토 콜 을 독립 적 으로 실현 해 야 한다(서로 다른 회사 간,같은 회사 의 서로 다른 기술 스 택 간 에 같은 협 의 를 실현 하 는 코드 를 재 활용 하기 어렵다).
3.성능 을 보장 하기 어렵 고 서로 다른 네트워크 프로 토 콜 의 실현 에 커 다란 성능 차이 가 존재 할 수 있다.
그 렇 기 때문에 현실 의 실현 방식 은:
우선,네트워크 프로 토 콜 표준 을 정의 하면 이 표준 프로 토 콜 의 데이터 베 이 스 를 지원 하면 해당 하 는 클 라 이언 트 와 통신 할 수 있 습 니 다.
그 다음 에 이 표준 프로 토 콜 을 실현 하 는 클 라 이언 트 를 하나의 통신 라 이브 러 리 로 독립 시 키 면 응용 프로그램 에서 이 통신 구성 요소 라 이브 러 리 를 사용 하면 데이터 베이스 와 편리 하 게 상호작용 을 할 수 있다.
일반적으로 우 리 는 네트워크 프로 토 콜 의 통신 라 이브 러 리 를 데이터베이스 드라이버 라 고 부른다.물론 서로 다른 프로 그래 밍 언어 에 대해 서 는 해당 하 는 데이터 베 이 스 를 만들어 야 합 니 다.
실현관계 형 데이터베이스 와 의 통신 을 예 로 들 면 자바 에서 구현 되 는 드라이버 는 JDBC 이 고 파 이 썬 의 드라이버 는 MySQLdb 이다.
TCP 를 통 해 데이터베이스 와 네트워크 연결 을 구축 하 는 대가 가 매우 높 고 시간 이 걸 리 기 때문이다.그래서 실천 에서 연결 을 직접 사용 하지 않 고 데이터 베 이 스 를 조작 하 는 방식 으로 연결 탱크 를 사용 하 는데 이것 은 주로 다음 과 같은 두 가지 측면 에서 고려 하 는 것 이다.
응용 프로그램 자체 에 더 낮은 응답 시간 이 필요 합 니 다.만약 에 데이터 베 이 스 를 조작 할 때마다'연결 구축->통신(추가 삭제 검사)->연결 끊 기'과정 을 거 쳐 야 한다 면 반드시 응답 지연 시간 이 증가 할 것 입 니 다.
서버 자원 이 소 진 되 는 것 을 피하 고 업 무량 이 증가 함 에 따라 대응 하 는 데이터 베이스 작업 이 반드시 증가 할 것 입 니 다.클 라 이언 트 의 연결 수 를 제어 하지 않 으 면 데이터 베이스 서버 의 CPU 와 메모리 자원 이 대량의 네트워크 연결 에 의 해 신속하게 소 진 될 수 있 습 니 다.그러면 서 비 스 를 사용 할 수 없습니다.
자바 에서 비교적 유행 하 는 데이터베이스 연결 탱크 는 주로 DBCP,c3p 0,druid 가 있다.
또한 어떤 연결 풀 을 사용 하 든 저층 은 JDBC 연결 을 사용 합 니 다.즉,응용 프로그램 에 JDBC 드라이버 를 불 러 와 야 합 니 다.
DBCP
https://commons.apache.org/proper/commons-dbcp/index.html
DBCP 는 Apache 아래 독립 된 데이터베이스 연결 풀 구성 요소 로,Tomcat 에서 사용 하 는 연결 풀 구성 요 소 는 DBCP 로 JDBC 3,JDBC 4 를 지원 한다.더 많은 JDBC 버 전에 대한 정 보 는 다음 과 같다https://en.wikipedia.org/wiki/Java_Database_Connectivity
c3p0
http://www.mchange.com/projects/c3p0/
c3p 0 을 사용 하 는 방법 은 여러 가지 가 있 습 니 다.예 를 들 어 API 방식 으로 c3p 0 을 직접 설정 할 수도 있 고 파일 방식 으로 설정 할 수도 있 습 니 다.프로필 은 2 가지 형식 이 있 습 니 다.properties 나 xml 파일 입 니 다.
<dependencies>
<!-- JDBC -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
<!-- c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
1.자바 API 방식 으로 c3p 0 설정
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( "com.mysql.jdbc.Driver" ); //loads the jdbc driver
cpds.setJdbcUrl("jdbc:mysql://host:port/db");
cpds.setUser("username");
cpds.setPassword("password");
cpds.setMinPoolSize(5);
cpds.setMaxPoolSize(20);
cpds.setAcquireIncrement(5);
//
Connection conn = cpds.getConnection();
query(conn);
//
// cpds.close();
2.c3p 0 을 파일 로 설정2.1 c3p0.properties 파일 로 설정
classpath 경로 에 프로필 을 추가 해 야 합 니 다:c3p0.properties,내용 은 다음 과 같 습 니 다:
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://host:port/db
c3p0.user=root
c3p0.password=
c3p0.minPoolSize=5
c3p0.maxPoolSize=20
c3p0.acquireIncrement=5
프로그램 에서 ComboPooledDataSource 대상 을 직접 만 들 면 됩 니 다(c3p 0 은 classpath 에서 c3p 0.properties 의 설정 정 보 를 자동 으로 불 러 옵 니 다).
ComboPooledDataSource cpds = new ComboPooledDataSource();
Connection conn = cpds.getConnection();
query(conn);
cpds.close();
메모:c3p 0.properties 를 설정 파일 로 사용 할 때 매개 변수의 name 접 두 사 는"c3p 0"이 어야 합 니 다.예 를 들 어"c3p 0.driver Class=com.my sql.jdbc.Driver"입 니 다.2.2 c3p0-config.xml 파일 로 설정
이 방식 을 사용 하면 c3p0.properties 를 사용 하 는 것 보다 더 고 급 스 럽 습 니 다.여러 데이터 원본 설정 을 지원 합 니 다.classpath 경로 에 파일 을 추가 해 야 합 니 다:c3p0-config.xml.
<c3p0-config>
<!-- -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://host:port/db</property>
<property name="user">username</property>
<property name="password">password</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
<property name="acquireIncrement">5</property>
</default-config>
<!-- -->
<named-config name="myDataSource">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test_jdbc</property>
<property name="user">root</property>
<property name="password"></property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
<property name="acquireIncrement">5</property>
</named-config>
</c3p0-config>
//
// ComboPooledDataSource cpds = new ComboPooledDataSource();
//
ComboPooledDataSource cpds = new ComboPooledDataSource("myDataSource");
Connection conn = cpds.getConnection();
query(conn);
cpds.close();
3.c3p 0 상용 설정
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://host:port/db</property>
<property name="user">username</property>
<property name="password">password</property>
<!-- , : 3 -->
<property name="initialPoolSize">3</property>
<!-- , : 3 -->
<property name="minPoolSize">3</property>
<!-- , , 。 -->
<property name="maxPoolSize">15</property>
<!-- , : 3 -->
<property name="acquireIncrement">3</property>
<!-- , , , 。 0, 。 : 0, : -->
<property name="maxIdleTime">0</property>
<!-- -->
<property name="preferredTestQuery">select 1</property>
<!-- 。 MySQL 8 。 , , MySQL8 。 0 。 :0, : -->
<property name="idleConnectionTestPeriod">30</property>
<!-- , 0 。 : 30 -->
<property name="acquireRetryAttempts">30</property>
<!-- , : 1000, : -->
<property name="acquireRetryDelay">1000</property>
</default-config>
</c3p0-config>
druidhttps://github.com/alibaba/druid
아 리 개원 의 druid 는 단순히 연결 탱크 가 아니 라 모니터링 기능 도 추 가 했 습 니 다.현 재 는 매우 추앙 받 는 연결 탱크 구성 요소 입 니 다.상세 한 설정 파 라미 터 는 홈 페이지 를 참고 하 십시오.
물론 다른 데이터베이스 연결 탱크 도 존재 한다.예 를 들 어 Tomcat 는 스스로 연결 탱크 구성 요 소 를 실현 했다.공식 적 인 견해 에 따 르 면 이 연결 탱크 는 바로 Tomcat 에서 DBCP 를 교체 하기 위 한 것 이다.상세 한 내용 은 다음 과 같다https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.