JSP에서 Tomcat의 SQL Server2000 데이터베이스 연결 풀 구성 환경:
1. 데이터베이스: 마이크로소프트 SQL 서버 2000
2. 데이터베이스 드라이버: net.sourceforge.jtds.jdbc.Driver
JNDI(Java 이름 지정 및 디렉터리 인터페이스) 개요:
Tomcat4(5)는 Java Enterprise Edition 애플리케이션 서비스와 호환되는 JNDI--InitialContext 구현 예제를 제공합니다. 초기 데이터는 $CATALINA_HOME/conf/server.xml 파일에 설정되어 있으며 웹 애플리케이션 환경 설명(/WEB-INF/web.xml)의 다음 요소에서 참조할 수 있습니다.
1)
2)
3)
웹 애플리케이션 구성요소를 지원하기 위해 웹 애플리케이션이 초기화될 때 InitialContext가 설정됩니다. 모든 항목과 리소스는 JNDI 네임스페이스의 java:comp/env 섹션에 배치됩니다. 자세한 내용을 보려면 다음 URL을 클릭하세요.
1) Java 이름 지정 및 디렉토리 인터페이스
2) J2EE 플랫폼 사양
JNDI 자원 설정 JNDI 자원을 설정하려면 $CATALINA_HOME/conf/server.xml 파일에서 다음 식별자를 사용하십시오.
1)
2)
3)
4)
위의 식별자는
또한 웹 애플리케이션 디스크립터(/WEB-INF/web.xml)에 설정된 이름과 값은 초기 컨텍스트에도 설정되며,
전역 변수는
데이터베이스 연결 풀 개요:
데이터베이스 연결은 특히 다중 사용자 웹 애플리케이션에서 중요하고 제한적이며 비용이 많이 드는 리소스입니다. 데이터베이스 연결 관리는 전체 애플리케이션의 확장성과 견고성에 큰 영향을 미칠 수 있으며 프로그램의 성능 지표에 영향을 미칠 수 있습니다. 이 문제를 해결하기 위해 데이터베이스 연결 풀이 제안되었습니다.
데이터베이스 연결 풀은 데이터베이스 연결 할당, 관리 및 해제를 담당합니다. 이를 통해 애플리케이션은 연결을 다시 설정하는 대신 기존 데이터베이스 연결을 재사용할 수 있습니다. 해제 실패로 인한 오류를 방지하기 위해 유휴 시간이 최대 유휴 시간을 초과하는 데이터베이스 연결을 해제합니다. 데이터베이스 연결이 누락되어 발생했습니다. 이 기술은 데이터베이스 작업 성능을 크게 향상시킬 수 있습니다.
데이터베이스 연결 풀은 특정 수의 데이터베이스 연결을 생성하고 초기화 중에 이를 연결 풀에 넣습니다. 이러한 데이터베이스 연결 수는 최소 데이터베이스 연결 수에 따라 설정됩니다. 이러한 데이터베이스 연결의 사용 여부에 관계없이 연결 풀에는 항상 최소한 이만큼의 연결이 보장됩니다. 연결 풀의 최대 데이터베이스 연결 수는 연결 풀이 차지할 수 있는 최대 연결 수를 제한합니다. 연결 풀에서 응용 프로그램이 요청한 연결 수가 최대 연결 수를 초과하면 해당 요청이 데이터베이스에 추가됩니다. 대기 대기열. 데이터베이스 연결 풀의 최소 연결 수와 최대 연결 수를 설정할 때는 다음 요소를 고려해야 합니다.
1) 최소 연결 수는 연결 풀에서 유지 관리하는 데이터베이스 연결 수이므로 응용 프로그램이 많은 양의 데이터베이스 연결을 사용하지 않으면 많은 양의 데이터베이스 연결 리소스가 낭비됩니다.
2) 최대 연결 수는 연결 풀이 신청할 수 있는 최대 연결 수입니다. 데이터베이스 연결 요청이 이 수를 초과하면 후속 데이터베이스 연결 요청이 대기 대기열에 추가되며 이는 후속 데이터베이스 작업에 영향을 미칩니다.
3) 최소 연결 수와 최대 연결 수의 차이가 너무 큰 경우 첫 번째 연결 요청이 유리하며, 최소 연결 수를 초과하는 후속 연결 요청은 새로운 데이터베이스 연결을 설정하는 것과 같습니다. 그러나 최소 연결 수보다 큰 데이터베이스 연결은 사용 후 즉시 해제되지 않으며 재사용을 기다리기 위해 연결 풀에 배치되거나 유휴 시간 초과 후에 해제됩니다.
Tomcat 데이터베이스 연결 풀 구성을 위한 전제 조건:
1. Java 런타임 환경이 설치되어 있어야 합니다.
2. SQL Server2000 데이터베이스 서버가 있어야 합니다(로컬일 필요는 없음).
3. jtds.jar이 있어야 하며 이를 $CATALINA_HOME/common/lib 디렉토리(여기에서만)에 배치해야 합니다. 이는 Microsoft의 Java SQL Server 드라이버가 온라인에서 찾을 수 있는 보조 쿼리를 지원하지 않기 때문에 사용됩니다. 현재 jtds-0.6.jar을 사용하고 있습니다.
$CATALINA_HOME/conf/server.xml에서 데이터베이스 연결 풀을 설정합니다.
다음은
<리소스 이름="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
<매개변수>
<값>100값>
<매개변수>
<매개변수>
<매개변수>
<값>참값>
<매개변수>
<매개변수>
<값>거짓값>
<매개변수>
<값>org.apache.commons.dbcp.BasicDataSourceFactory값>
<매개변수>
<이름>사용자 이름
<매개변수>
<이름>비밀번호이름>
<매개변수>
<매개변수>
<이름>URL이름>
<값>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind값>
컨텍스트>
다음은 일부 매개변수에 대한 설명입니다.
안에:
1) 경로는 경로를 지정하며 여기에 설정된 품질 디렉터리는 $CATALINA_HOME/webapps입니다.
2) docBase 파일 루트 디렉터리.
3) reloader 웹 페이지가 업데이트될 때 다시 컴파일할지 여부입니다.
4) maxActive 연결 풀의 최대 데이터베이스 연결 수입니다. 0으로 설정하면 제한이 없습니다.
5) maxIdle 데이터베이스 연결의 최대 유휴 시간입니다. 이 유휴 시간이 지나면 데이터베이스 연결은 사용할 수 없는 것으로 표시된 후 해제됩니다. 0으로 설정하면 제한이 없습니다.
6) maxWait는 연결 설정을 위한 최대 대기 시간입니다. 이 시간을 초과하면 예외가 수신됩니다. 제한이 없음을 나타내려면 -1로 설정합니다.
7) 제거Abandoned는 버려진(일반적으로 해제하는 것을 잊은) 데이터베이스 연결을 연결 풀로 재활용합니다.
8) RemoveAbandonedTimeout 데이터베이스 연결이 오랫동안 사용되지 않으면 포기된 것으로 간주되어 연결 풀로 반환됩니다.
9) logAbandoned는 버려진 데이터베이스 연결의 재활용을 기록합니다.
10) DriverClassName JDBC 드라이버.
11) URL 데이터베이스 연결 문자열은 $CATALINA_HOME/webapps/quality/WEB-INF/web.xml에서 참조 리소스를 설정합니다.
다음은
<리소스 참조>
다음은 매개변수에 대한 필수 설명입니다.
1) 설명 참조된 리소스에 대한 설명입니다.
2) res-ref-name 리소스 이름. 위의
3) res-type 리소스 유형. 위의
JSP에서 리소스 사용:
이는 $CATALINA_HOME/webapps/quality 아래의 특정 하위 디렉터리에 있는 jsp 웹 페이지 파일에 대한 코드의 일부입니다.
<%@ 페이지 contentType="text/html;charset=GBK"%>
<%@ 페이지 errorPage="error.jsp"%>
<%@ 페이지 import="javax.naming.*"%>
<%@ 페이지 가져오기="javax.sql.*"%>
<%@ 페이지 가져오기="java.sql.*"%>
<머리>
<본문>
<%
..........
………………
// 데이터베이스 작업
컨텍스트 ctx=null;
연결 cnn=null;
명령문 stmt=null;
결과 집합 rs=null;
노력하다
{
ctx=new 초기컨텍스트();
if(ctx==널)
throw new Exception("일치하는 환경이 없습니다.");
데이터소스 ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
if(ds==널)
throw new Exception("일치하는 데이터베이스가 없습니다.");
cnn=ds.getConnection();
stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt.executeQuery
("table1에서 *를 선택하세요");
…………
}
마지막으로
{
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(cnn!=널)
cnn.close();
if(ctx!=널)
ctx.close();
}
%>