Tomcat과 MySQL 사이의 연결 풀 문제에 대한 자세한 설명(원본)에 대해
하루 동안 연구했으며마침내 모든 사람들에게 도움이 되는 내용을 얻었기를 바랍니다. 우선, 여기서는 Tomcat 5.5 버전에서 발생한 문제를 구체적으로 논의합니다. 이 버전이 특히 구체적인 이유는 잠시 후에 설명하겠습니다.
질문 1: 연결 URL 'null'에 대해 '' 클래스의 JDBC 드라이버를 생성할 수 없습니다.
답변:
[원인분석]
많은 친구들이 $Tomcat/conf/server.xml, $Tomcat/conf/context.xml, 심지어 WEB-INF/web.xml을 구성한 후 연결 풀을 호출할 때 위와 같은 오류가 발생했다는 사실을 발견했습니다. 오류의 원인을 분석해 보면 일반적으로 데이터 소스를 바인딩하지 않았기 때문입니다(실제 오류의 원인은 DriverClassName 및 url의 설정이 비어 있기 때문이지만 이 위치를 설정하는 것을 절대 잊지 않을 것이므로 반드시 연결하지 않고 설정을 완료했습니다!). 일반적으로 데이터 소스를 구성하는 방법에는 두 가지가 있습니다($Tomcat/conf/context.xml의 설정 방법뿐만 아니라). 하나는 $Tomcat/conf/server.xml의 </GlobalNamingResources> 앞에 다음 코드를 추가하는 것입니다.
설정 방법 1:
<자원
name="jdbc/test" //데이터 소스 이름
유형="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver" //방금 언급한 드라이버클래스이름의 설정입니다.
비밀번호="admin" //데이터베이스 비밀번호
maxIdle="2"
maxWait="5000"
사용자 이름="root" //데이터베이스 사용자 이름
url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //방금 언급한 URL인 데이터베이스 URL
maxActive="4"/>
주석이 있는 부분을 제외하고 모든 매개변수는 연결 수, 유휴 상태 및 활동 상태를 설정하는 데 사용됩니다. 학습 실험을 수행하는 경우에는 변경할 필요가 없습니다. 이 방법의 효과는 Tomcat 그래픽 인터페이스에서 작업을 구성하는 것과 동일합니다.
또 다른 방법은 $Tomcat/conf/server.xml의 <Context ...></Context>에 다음 코드를 추가하는 것입니다.
설정 방법 2:
<리소스 이름="jdbc/test" auth="컨테이너" type="javax.sql.DataSource"/>
<ResourceParams 이름="jdbc/test">
<매개변수>
<name>공장</name>
<값>org.apache.commons.dbcp.BasicDataSourceFactory</값>
</parameter>
<매개변수>
<이름>사용자 이름</name>
<value>루트</value>
</parameter>
<매개변수>
<이름>비밀번호</이름>
<value>관리자</value>
</parameter>
<매개변수>
<name>드라이버클래스이름</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<매개변수>
<이름>URL</이름>
<값>jdbc:mysql://localhost:3306/test?autoReconnect=true</값>
</parameter>
<매개변수>
<name>초기 크기</name>
<value>20</value>
</parameter>
<매개변수>
<name>최대활성</name>
<value>30</value>
</parameter>
<매개변수>
<name>최대 대기</name>
<value>10000</value>
</parameter>
</ResourceParams>
이 설정의 일반적인 목적은 데이터 소스가 별도의 매핑 디렉터리에서 구현되도록 허용하는 것입니다. 즉, 일반적으로 이 코드는 <Context docBase="특정 디렉터리(예: D:webappsmyjsp)에 나타납니다. " path= "액세스 이름(예: /myjsp)" reloadable="true"></Context>, http://localhost:8080/myjsp/ 에 액세스하여 D:webappsmyjsp에 있는 파일에 액세스할 수 있습니다. XXX.jsp 그런 다음 jsp 페이지는 데이터 소스를 검색하거나 데이터 소스를 검색하기 위한 다른 작업을 수행합니다.
문제는 어떤 방법을 사용해도 아무도 연결되지 않는다는 것입니다! ResourceLink를 사용하지 않으면 빈이나 빈이 설정한 코드를 찾을 수 없습니다. 드라이버 클래스 이름과 URL을 어떻게 찾을 수 있나요? 실제로 매개변수 설정 중 어떤 것도 발견되지 않습니다!
[해결책]
이유를 알고 나면 해결이 더 쉬워집니다. 어떤 방법을 사용하든 상관 없습니다.
해결 방법 1:
매핑 디렉터리에 ResourceLink를 구현하려면 <Context...></Context> 중간에 <ResourceLink global="data source name" name="mapped name" type="javax.sql.DataSource"를 추가하세요. "/>, 코드 관계를 이해하지 못할 경우에는 <Context...> 뒤에 꼭 적어야 하니 주의하시기 바랍니다.
해결 방법 2:
전역적으로 만들고 모든 매핑 디렉터리에서 사용할 수 있도록 하려면 $Tomcat/conf/context.xml에 작성하면 모든 것이 정상입니다.
일반적으로 모든 사람이 "데이터 소스 이름"과 "매핑된 이름"을 동일하게 설정합니다. 예를 들어 <ResourceLink global="jdbc/test" name="jdbc/test" type="javax. sql.DataSource" "/>.
또한, Tomcat5.5에서는 위의 두 번째 방법을 설정하면 ResourceLink를 추가하더라도 제대로 실행되지 않는 문제가 발생한다는 점을 주의해야 한다.
질문 2: javax.naming.NameNotFoundException: 이름 XXX가 이 컨텍스트에 바인딩되어 있지 않습니다.
답변:
[원인 분석]
Tomcat5.5에서는 <Context...><Context>에 데이터 소스 설정이 제대로 되지 않습니다. 외국인이 쓴 글을 봤는데 영어 수준이 높지 않은데 그냥 이해가 되네요. 그는 상위 버전(Tomcat 및 dbcp여야 함)에서는 Factory 값이 org.apache.commons.dbcp.BasicDataSourceFactory에서 org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory로 변경되었기 때문이라고 말했습니다. 하지만 시도해 보았으나 문제가 해결되지 않았습니다. 그리고 Tomcat5.5의 표준 버전에는 $Tomcatcommonlib에 있는 dbcp가 포함되어 있다는 것을 알았습니다. 다른 네티즌의 설명을 읽어보니 두 번째 설정 방법은 불가능하다고 하더군요. 이는 두 번째 설정 방법이 이전 버전에만 적용된다는 점을 보여줍니다. 현재 버전에서는 어떤 부분을 변경해야 할지 모르겠으나, 함께 설정하려고 하는데 서버에서 찾을 수 없어서 오류가 발생합니다. "데이터 소스 이름"에 해당하는 데이터 소스입니다.
[해결책]
이유를 알면 해결될 것 같습니다. <GlobalNamingResources>에 데이터 소스가 선언되어 있어야만 작동하는 것 같습니다. 따라서 누구나 첫 번째 설정 방법에 따라 Tomcat5.5를 설정할 수 있습니다(이것이 제가 특히 Tomcat5.5에 대해 이야기하는 이유입니다).
질문 3: JDBC 드라이버 클래스 'com.mysql.jdbc.Driver'를 로드할 수 없습니다.
답변:
[원인 분석]
mysql뿐만 아니라 다른 데이터베이스에서도 이를 찾을 수 없으면 "JDBC 드라이버 클래스를 로드할 수 없습니다"라는 오류가 발생합니다. 그렇다면 왜 데이터베이스 드라이버 클래스를 찾을 수 없는 걸까요? 그것을 찾는 방법? 실제로는 매우 간단합니다.
[해결책]
jdbc를 $Tomcatcommonlib에 복사하세요.
질문 4: 연결할 수 없습니다. 풀이 소진되었습니다.
[원인 분석]
매우 간단합니다. 연결을 설정할 수 없으며 연결 풀이 오버플로됩니다. 이는 연결 리소스를 제때 재활용하지 않았기 때문에 낭비된다는 의미입니다.
[해결책]
ResultSet,Statement,Connection을 해제하려면 close() 메소드를 신속하고 정확하게 사용하세요. 구체적인 문장은 넣지 않겠습니다.
요약: 따라서 Tomcat5.5를 사용하여 데이터 소스 연결 풀을 설정하려면 세 단계만 거치면 됩니다.
첫째: 데이터 소스를 설정하는 것이 좋습니다. 수동으로 수행하는 경우 $Tomcat/conf/server.xml의 </GlobalNamingResources> 앞에 다음 코드를 추가하세요
.
name="jdbc/test" //데이터 소스 이름
유형="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver" //방금 언급한 드라이버클래스이름의 설정입니다.
비밀번호="admin" //데이터베이스 비밀번호
maxIdle="2"
maxWait="5000"
사용자 이름="root" //데이터베이스 사용자 이름
url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //방금 언급한 URL인 데이터베이스 URL
maxActive="4"/>
주석 매개변수를 자신의 것으로 변경하는 것을 잊지 마세요.
둘째: 리소스 연결을 설정합니다. 별도로 매핑하고 싶다면 $Tomcat/conf/context.xml에 <ResourceLink global="data source name" name="mapped name" type="javax.sql.DataSource"/>를 작성하는 것을 권장합니다. 디렉토리 구현은 $Tomcat/conf/server.xml에서 매핑해야 하는 디렉토리의 <Context...> 뒤에 작성됩니다.
세 번째: JDBC를 $Tomcatcommonlib에 복사합니다.
또한 여기서는 데이터 소스를 호출하는 방법을 자세히 설명하지 않습니다. 이 문제는 비교적 간단하지만 DataSource ds=(DataSource)envCtx.lookup(" 참조 데이터 소스 "); 명령문의 "참조 데이터 소스"는 "데이터 소스 이름"이 아닌 "매핑된 이름"일 뿐이므로 편의상 두 이름을 동일하게 설정하는 것이 좋습니다. 그리고 제때에 유휴 리소스를 해제하는 데 특별한 주의를 기울이십시오. 그렇지 않으면 연결 풀이 오버플로됩니다!
위의 내용은 오늘 제가 조사한 결과 중 일부입니다. 이 기사가 모든 사람에게 도움이 되기를 바랍니다. 질문이 있으시면 제 이메일 주소: [email protected] (네온 불빛을 좋아하시는 분들)에게 연락주세요. 이 기사는 neolight.bokee.com(CSDN_MathMagician)의 원본이므로 복제할 수 없습니다! 2006년 8월 11일
http://blog.csdn.net/mathmagician/archive/2007/03/01/1518689.aspx