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) <env-entry>--환경 항목, 애플리케이션 작동 방식을 설정합니다.
2) <resource-ref>--리소스 매개변수, 일반적으로 데이터베이스 드라이버, JavaMail 세션, 사용자 정의 클래스 팩토리 등
3) <resource-env-ref>--Servlet 2.4에서는 환경 매개변수, Resource-ref 변수 등 인증 정보가 필요하지 않은 리소스 설정을 단순화하기 위해 사용된다.
웹 애플리케이션 구성요소를 지원하기 위해 웹 애플리케이션이 초기화될 때 InitialContext가 설정됩니다. 모든 항목과 리소스는 JNDI 네임스페이스의 java:comp/env 섹션에 배치됩니다. 자세한 내용을 보려면 다음 URL을 클릭하세요.
1) Java 이름 지정 및 디렉토리 인터페이스
2) J2EE 플랫폼 사양
JNDI 자원 설정 JNDI 자원을 설정하려면 $CATALINA_HOME/conf/server.xml 파일에서 다음 식별자를 사용하십시오.
1) <Environment>--도메인의 JNDI 초기 컨텍스트 항목 변수의 이름과 값을 설정합니다(위에서 언급한 <env-entry>와 동일).
2) <Resource>--애플리케이션에 사용 가능한 리소스의 이름과 유형을 설정합니다(위에서 언급한 <resource-ref>와 동일).
3) <ResourceParams>--사용할 Java 리소스 클래스 팩토리 또는 JavaBean 속성의 이름을 설정합니다.
4) <ResourceLink>--전역 JNDI 환경(JNDI 컨텍스트)에 대한 링크를 추가합니다.
위의 식별자는 <Context>와 </Context> 사이(특수 웹 애플리케이션의 경우) 또는 <DefaultContext>와 </DefaultContext> 사이에 배치되어야 합니다.
또한 웹 애플리케이션 디스크립터(/WEB-INF/web.xml)에 설정된 이름과 값은 초기 컨텍스트에도 설정되며, <Environemt> 요소 값이 활성화되면 초기 값으로 재설정됩니다.
전역 변수는 <Server> 하위 요소의 <GlobalNamingResources>에서 설정할 수 있습니다.
데이터베이스 연결 풀 개요:
데이터베이스 연결은 특히 다중 사용자 웹 애플리케이션에서 중요하고 제한적이며 비용이 많이 드는 리소스입니다. 데이터베이스 연결 관리는 전체 애플리케이션의 확장성과 견고성에 큰 영향을 미칠 수 있으며 프로그램의 성능 지표에 영향을 미칠 수 있습니다. 이 문제를 해결하기 위해 데이터베이스 연결 풀이 제안되었습니다.
데이터베이스 연결 풀은 데이터베이스 연결 할당, 관리 및 해제를 담당합니다. 이를 통해 애플리케이션은 연결을 다시 설정하는 대신 기존 데이터베이스 연결을 재사용할 수 있습니다. 해제 실패로 인한 오류를 방지하기 위해 유휴 시간이 최대 유휴 시간을 초과하는 데이터베이스 연결을 해제합니다. 데이터베이스 연결이 누락되어 발생했습니다. 이 기술은 데이터베이스 작업 성능을 크게 향상시킬 수 있습니다.
데이터베이스 연결 풀은 특정 수의 데이터베이스 연결을 생성하고 초기화 중에 이를 연결 풀에 넣습니다. 이러한 데이터베이스 연결 수는 최소 데이터베이스 연결 수에 따라 설정됩니다. 이러한 데이터베이스 연결의 사용 여부에 관계없이 연결 풀에는 항상 최소한 이만큼의 연결이 보장됩니다. 연결 풀의 최대 데이터베이스 연결 수는 연결 풀이 차지할 수 있는 최대 연결 수를 제한합니다. 연결 풀에서 응용 프로그램이 요청한 연결 수가 최대 연결 수를 초과하면 해당 요청이 데이터베이스에 추가됩니다. 대기 대기열. 데이터베이스 연결 풀의 최소 연결 수와 최대 연결 수를 설정할 때는 다음 요소를 고려해야 합니다.
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에서 데이터베이스 연결 풀을 설정합니다.
다음은 <Host>와 </Host> 사이에 위치해야 하는 구성 코드입니다.
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>
<리소스 이름="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams 이름="jdbc/connectDB">
<매개변수>
<name>최대활성</name>
<!-- 풀의 최대 DB 연결 수. 제한이 없는 경우 0으로 설정하세요. -->
<값>100</값>
</parameter>
<매개변수>
<name>maxIdle</name>
<!-- 풀에 보관할 최대 유휴 DB 연결 수. 제한이 없는 경우 0으로 설정하세요. -->
<value>30</value>
</parameter>
<매개변수>
<name>최대 대기</name>
<!-- ms 단위로 DB 연결을 사용할 수 있을 때까지 기다리는 최대 시간입니다. 이 시간 제한을 초과하면 예외가 발생합니다. 무기한 기다리려면 -1로 설정하세요. -->
<value>10000</value>
</parameter>
<매개변수>
<name>removeAbandoned</name>
<!-- 버려진 DB 연결을 제거하고 재활용합니다 -->
<값>참</값>
</parameter>
<매개변수>
<name>removeAbandonedTimeout</name>
<!-- DB 연결이 중단된 것으로 간주되기 전까지 유휴 상태였던 시간(초)을 설정하려면 RemoveAbandonedTimeout 매개변수를 사용하십시오. -->
<value>60</value>
</parameter>
<매개변수>
<name>logAbandoned</name>
<!-- 포기한 코드의 스택 추적을 기록합니다 -->
<값>거짓</값>
</parameter>
<매개변수>
<name>공장</name>
<!-DBCP 기본 데이터 소스 팩토리 -->
<값>org.apache.commons.dbcp.BasicDataSourceFactory</값>
</parameter>
<매개변수>
<이름>사용자 이름</name>
<!-- 데이터베이스 사용자 이름 -->
<value>이오리시니어</value>
</parameter>
<매개변수>
<이름>비밀번호</이름>
<!-- 사용자 비밀번호 -->
<value>mypasswd</value>
</parameter>
<매개변수>
<name>드라이버클래스이름</name>
<!-- 데이터베이스 드라이버 클래스 이름 -->
<value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<매개변수>
<이름>URL</이름>
<!-- 데이터베이스 주소 -->
<값>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</값>
</parameter>
</ResourceParams>
</컨텍스트>
다음은 일부 매개변수에 대한 설명입니다.
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
안에:
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에서 참조 리소스를 설정합니다.
다음은 <web-app>, </web-app>에 반드시 넣어야 하는 설정 코드입니다.
<!-- 데이터베이스 구성 시작 -->
<리소스 참조>
<description>connectDB 테스트</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>컨테이너</res-auth>
</resource-ref>
<!-- 데이터베이스 구성 끝 -->
다음은 매개변수에 대한 필수 설명입니다.
1) 설명 참조된 리소스에 대한 설명입니다.
2) res-ref-name 리소스 이름. 위의 <ResourceParams name="jdbc/connectDB">를 참조하세요.
3) res-type 리소스 유형. 위의 <Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>를 참조하세요.
JSP에서 리소스 사용:
이는 $CATALINA_HOME/webapps/quality 아래의 특정 하위 디렉터리에 있는 jsp 웹 페이지 파일에 대한 코드의 일부입니다.
<%@ 페이지 contentType="text/html;charset=GBK"%>
<%@ 페이지 errorPage="error.jsp"%>
<%@ 페이지 import="javax.naming.*"%>
<%@ 페이지 가져오기="javax.sql.*"%>
<%@ 페이지 가져오기="java.sql.*"%>
<html>
<머리>
</head>
<본문>
<%
..........
………………
// 데이터베이스 작업
컨텍스트 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();
}
%>
</body>
</html>
코드 설명:
데이터소스 ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
위 문장은 방금 설정한 리소스를 적용한 것입니다.
사용 후 리소스, 특히 컨텍스트 리소스를 해제하는 것은 좋은 습관입니다. try-catch-finally 섹션의 finally 코드 세그먼트를 참조하세요. 리소스 해제 중에 상위 리소스가 해제되면 하위 리소스가 먼저 해제됩니다. 예를 들어 ctx가 해제되면 리소스 해제 순서는 rs, stmt, cnn, ctx가 됩니다. 즉, ctx가 해제되면 rs, stmt 및 cnn을 사용할 수 없게 됩니다.
여기서 리소스를 해제하면 데이터베이스 연결이 연결 풀로 반환될 뿐 실제로 리소스가 해제되는 것은 아닙니다. 데이터베이스 연결 풀 개요를 참조하세요.