Java 데이터베이스 연결 풀에 대한 자세한 설명
데이터베이스 연결 풀링의 원리는 다음과 같습니다.
연결 풀링의 기본 아이디어는 시스템이 초기화 될 때 데이터베이스 연결을 메모리의 개체로 저장하는 것입니다. 사용자가 데이터베이스에 액세스 해야하는 경우 새 연결을 설정하는 대신 연결된 무료 연결 객체가 연결 풀에서 꺼집니다. 사용 후 사용자는 연결을 닫지 않지만 다음 요청에 대한 액세스를 위해 연결 풀에 연결을 다시 넣습니다. 연결 풀 자체에 의해 연결 및 연결이 연결됩니다. 동시에 연결 풀에서의 초기 연결 수, 연결의 상한 및 하한 및 하한 및 각 연결의 최대 사용 시간 수, 최대 유휴 시간 등을 제어 할 수도 있습니다. 연결 풀의 매개 변수를 설정하여. 또한 자체 관리 메커니즘을 통해 데이터베이스 연결, 사용법 등의 수를 모니터링 할 수 있습니다.
일반적으로 사용되는 데이터베이스 연결 풀 :
일반적으로 사용되는 데이터베이스 연결 풀에는 JNDI, C3P0, Apache의 Jakarta 및 DBCPBoneCP가 포함됩니다. 그 중에서도 Sing 프레임 워크 사용 C3P0 및 DBCP에 의존하는 제 3 자; Bonecp는 가장 빠른 데이터베이스 연결 풀이라고합니다. JNDI 메소드에 의해 생성 된 데이터 소스는 실제로 javax.sql.datasource를 구현합니다 (다른 세 가지 방법 중 어느 것도 없음)
이제 우리는 주로 JNDI 메소드를 사용하는 방법을 소개합니다. 이 메소드는 웹 서버 (예 : Tomcat, Weblogic, WebSphere, Tomcat)에서 구현하여 java.sql.datasource를 구현합니다. 웹 서버는 데이터 소스 초기화, 연결 생성, 연결 할당 및 관리를 담당합니다. 웹 서버 자체에서 구현 된 기능이므로 프로젝트에 특수 JAR 패키지를 도입 할 필요는 없지만 서버의 일부 구성 파일에 관련 구성을 추가해야합니다. 다음으로 Tomcat 서버 (데이터베이스는 MySQL)를 사용 하여이 메소드의 사용을 설명합니다.
데이터베이스 생성 및 초기화 :
테이블 테스트 생성 (ID int 기본 키, 이름 varchar (10), 가격 플로트) 테스트 값 (1, '영어', 22.2)에 삽입; 테스트 값 (2, '수학', 78.9)에 삽입; 테스트 값 (3, 'history', 77.9)에 삽입하십시오.
1. 데이터 드라이버 MySQL-Connector-Java-5.0.3-Bin.jar를 Tomcat 디렉토리의 LIB에 넣으십시오.
2. Tomcat 's Conf에서 Context.xml 파일을 수정하고 리소스 구성에 대한 지원 추가
<resource auth = "컨테이너"DriverClassName = "com.mysql.jdbc.driver"maxActive = "100"maxIdle = "30"MaxWait = "10000"name = "jdbc/ewsdb"username = "root"password = "admin"type = "javax.sql.datasource" url = "jdbc : mysql : // localhost : 3306/test1"/>
<자원 속성 설명>
1) 이름 : 자원의 JNDI 이름을 지정합니다.
2) 인증 : 컨테이너와 응용 프로그램의 두 가지 선택 값이있는 리소스를 관리하는 관리자를 지정합니다. 컨테이너는 컨테이너가 리소스를 생성하고 관리한다는 것을 의미하며 응용 프로그램은 웹 응용 프로그램이 리소스를 생성하고 관리한다는 것을 의미합니다.
3) 유형 : 리소스의 Java 클래스 이름을 지정하십시오.
4) 사용자 이름 : 데이터베이스에 연결할 사용자 이름을 지정하십시오.
5) 비밀번호 : 데이터베이스에 연결할 암호를 지정하십시오.
6) Driver ClassName : 데이터베이스에 연결하는 JDBC 드라이브의 드라이버 구현 클래스의 이름을 지정합니다.
7) URL : 데이터베이스에 연결할 URL을 지정하십시오. 127.0.0.1은 연결할 데이터베이스 서버의 IP, 3306은 데이터베이스 서버 포트이고 BookDB는 데이터베이스 이름입니다.
8) Maxactive : 데이터베이스 연결 풀에서 활성 데이터베이스 연결 최대 수를 지정합니다. 값은 0이므로 제한되지 않았 음을 나타냅니다.
9) MaxIdle : 유휴 상태 인 데이터베이스 연결 풀의 최대 데이터베이스 연결 수를 지정합니다. 값은 0이므로 제한되지 않았 음을 나타냅니다.
10) Maxwait : 데이터베이스 연결 풀의 최대 시간 (밀리 초)을 유휴 상태로 지정합니다. 이 시간이 지나면 예외가 발생합니다. 값은 -1이므로 무기한 기다릴 수 있습니다.
maxactive = "100"
동시성의 연결 풀에서 얻을 수있는 최대 연결 수를 나타냅니다. 데이터베이스가 응용 프로그램에 단독으로 사용되지 않으면 Maxactive 매개 변수를 설정하면 응용 프로그램이 다른 응용 프로그램에서 무제한 연결을 얻지 못하게 할 수 있습니다. 데이터베이스가 응용 프로그램을 지원하는 데만 사용되는 경우 Maxactive는 이론적으로 데이터베이스가 지원할 수있는 최대 연결 수로 설정 될 수 있습니다. Maxactive는 단순히 연결 풀을 통해 동시에 얻을 수있는 최대 연결 수를 나타냅니다. 연결의 획득 및 릴리스는 양방향입니다. 응용 프로그램이 동시에 연결 풀을 요청하면 연결 풀은 데이터베이스에서 연결을 얻어야합니다. 따라서 응용 프로그램이 연결을 사용하고 연결 풀에 연결을 반환하면 연결 풀이 동시에 데이터베이스에 연결을 반환합니까? 분명히 대답은 아니오입니다. 이 경우 커넥션 풀이 불필요 해져 성능이 향상 될뿐만 아니라 성능이 줄어 듭니다. 그렇다면 연결을 반환 한 후 연결을 처리하는 방법은 무엇입니까?
maxidle = "30"
동시성 중에 maxactive = 100에 도달하면 연결 풀은 사용용 응용 프로그램을 제공하기 위해 데이터베이스에서 100 개의 연결을 얻어야합니다. MaxIdle = 30이므로 응용 프로그램이 연결을 닫으면 모든 연결이 데이터베이스에 반환되지는 않습니다. 연결 풀에 30 연결이 유지되며 상태는 유휴 상태입니다.
minidle =”2”
최소값은 기본적으로 적용되지 않습니다. 그 의미는 연결 풀에 미니 델이 거의 없을 때 시스템 모니터링 스레드가 보충 기능을 시작한다는 것입니다. 일반적으로 우리는 보충 스레드를 시작하지 않습니다.
질문 : Maxactive 및 Maxidle을 설정하는 방법은 무엇입니까?
이론적으로 Maxactive는 최대 동시 응용 프로그램 수로 설정되어야하므로 최대 동시성의 경우에도 응용 프로그램이 여전히 연결 풀에서 연결을 얻을 수 있습니다. 그러나 어려움은 최대 동시성 수를 정확하게 추정하기가 어렵다는 것입니다. 최대 동시성 번호로 설정하는 것은 최적의 서비스 품질 보증입니다.
Maxidle의 해당 연결은 실제로 연결 풀에 의해 유지되는 긴 연결이며 연결 풀이 장점을 재생하는 부분이기도합니다. 이론적으로 요청을 적용 할 때 더 긴 연결을 유지하는 것이 더 빨리 응답 할 수 있지만 너무 많은 연결을 유지하면 데이터베이스에서 많은 양의 리소스가 소비됩니다. 따라서 Maxidle이 클수록 좋습니다. 위와 같은 예에서는 55-100에서 Maxidle을 50-100에서 50에 가까운 숫자로 설정하는 것이 좋습니다. 이는 최대 동시성을 고려하면서 데이터베이스 연결을 적게 유지할 수 있으며 대부분의 경우 응용 프로그램에 가장 빠른 속도를 제공 할 수 있습니다.
3. 응용 프로그램의 web.xml 파일을 열고 다음 구성을 추가하십시오.
<resource-ref> <description> db 연결 </description> <ref-name> jdbc/ewsdb </res-ref-name> <res-type> javax.sql.datasource </res-type> <res-auth> contayer </res-auth> </resource-ref>
<Resource-Ref> 속성 설명 :
1) 설명 : 참조 된 자원에 대한 설명.
2) res-Ref-name : <proughce> 요소의 이름 속성에 해당하는 참조 된 자원의 JNDI 이름을 지정합니다.
3) RES-TYPE : <Resource> 요소의 유형 속성에 해당하는 참조 자원의 클래스 이름을 지정합니다.
4) Res-Auth : <presserce> 요소의 인증 속성에 해당하는 참조 리소스를 관리하는 관리자를 지정합니다.
4. Java 코드를 작성하여 다음과 같이 Tomcat 환경에 넣으십시오.
JSP 예제 : myjsp.jsp
<%@ page language = "java"contmenttype = "text/html; charset = utf-8"pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtml 4.01 transitional // en" "http://www.w.3.org/tr/tr/Tml 4/Thtml 4/Thtml 4/Thtml 4/tr. Page import = "java.io.*" %> < %@ page import = "java.util.*" %> < %@ page import = "java.sql.*" %> < %@ page import = "java.sql.*" %> < %@ page import = "javax.sql." %@ page import = "javax. import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.naming.*" %> "html> <head> <title> jndi database connection pool </titch </head> < %< %< %< %< %< %< %< %< %< %< %< %< %< %< %<body>" 진술 stmt; resultSet rs; 컨텍스트 ctx = new InitialContext (); DataSource ds = (DataSource) ctx.lookup ( "Java : comp/env/jdbc/ewsdb"); conn = ds.getConnection (); stmt = conn.createstatement (); // 쿼리 레코드 rs = stmt.executeQuery ( "선택, 이름, 테스트에서 가격 선택"); // 출력 쿼리 결과 out.println ( "<테이블 테두리 = 1 폭 = 400>"); while (rs.next ()) {문자열 col1 = rs.getstring (1); 문자열 col2 = rs.getString (2); float col3 = rs.getfloat (3); // 표시된 데이터 out.println ( "<tr> <td>"+col1+"</td> <td>"+col2+"</td> <td>"+col3+"</td> </tr>");} out.println ( "</table>"); // 결과 세트, SQL 선언 및 데이터베이스 연결 rs.close (); stmt.close (); conn.close (); } catch (예외 e) {out.println (e.getMessage ()); e.printstacktrace (); } %> </body> </html>브라우저에 http : // localhost : 8080/test/myjsp.jsp를 입력하여 결과를보십시오
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!