2014-07-08 1 views
1

Tomcat (버전 8)에 연결 풀을 설정하려고 시도한 것은 이번이 처음이며 혼란 스럽습니다. 내 프로젝트의 WEB-INF 폴더에 '의 context.xml'라는 파일에서WEB-INF/context.xml 또는 TOMCAT_HOME/conf/server.xml 아래의 Tomcat 연결 풀?

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <!-- Specify a JDBC datasource for oracle --> 
    <Resource name="jdbc/testdb" 
       auth="Container" 
       type="javax.sql.DataSource" 
       username="DB_USERNAME" 
       password="DB_PASSWORD" 
       driverClassName="oracle.jdbc.driver.OracleDriver" 
       url="jdbc:oracle:thin:@xxx:1525:dbname" 
       maxActive="10" 
       maxIdle="4" /> 
</Context> 

: 1) 나는이 비슷한을 추가 할 수 있습니다 내가 나에게 가능한 2 가지 옵션이 있습니다 것 같다. TOMCAT_HOME/conf의/sever.xml에서

<Context path="/dbcp" docBase="dbcp" debug="5" 
reloadable="true" crossContext="true"> 

<Resource name="jdbc/TestDB" auth="Container" 
    type="javax.sql.DataSource" removeAbandoned="true" 
    removeAbandonedTimeout="30" maxActive="100" 
    maxIdle="30" maxWait="10000" username="kunal" 
    password="java_facier" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost/dbcptest"/> 

</Context> 

다음이 추가 : 또는, 2) 나는 이런 식으로 뭔가를 추가 할 수 있습니다 내 WEB-INF/web.xml 파일에

<resource-ref> 
    <description> DB Connection Pooling</description> 
    <res-ref-name> jdbc/TestDB</res-ref-name> 
    <res-type> javax.sql.DataSource</res-type> 
    <res-auth> Container</res-auth> 
</resource-ref> 

을 내 프로젝트에서 ...

두 인스턴스가 맞다면 어느 것이 더 사용 하시겠습니까? 또한 데이터베이스 벤더 jdbc-driver는 어디에 두어야합니까?

+1

하나의 웹 응용 프로그램 만 사용할 경우 왜 server.xml에 넣을 지 알 수 없습니다. 이것으로 주변을 덜 어슬렁 거리는 일이 줄어 듭니다. –

+0

감사합니다 @ SkaryWombat, 그건 의미가 있습니다.그렇다면 DB 공급 업체의 JDBC 드라이버는 어디에 두어야합니까? maven을 사용하면 pom.xml에 지정할 수 있습니다. – Tiwaz89

+1

개인적으로 나는 물론 maven을 사용하는 WEB-INF/lib로 갈 것이다. –

답변

6

JDBC 라이브러리를 $ tomcat/lib 폴더에 놓으면 웹 응용 프로그램을 다시로드 할 수 없습니다. 나는 이것이 가장 일반적인 공통 규칙이고 심지어 공식 Apache Tomcat documentation이 $ CATALINA_HOME/lib 폴더를 지시하므로 그들의 지혜를 따르시기 바랍니다.

$ 바람둥이/웹 어플리케이션/mywebapp와/META-INF/context.xml에이 당신에게 응용 프로그램 수준의 풀을 제공
. 동일한 데이터베이스에 연결하는 두 개 이상의 웹 응용 프로그램이 각각 자신의 풀을 가지고 있습니다. 그것은 그들 자신의 사적인 최대 한도와 같은 미터를 의미합니다. mywebapp.war 파일을 배포하고 설치하는 것은 쉽습니다. 이것은 자체 포함 된 응용 프로그램입니다.

$ 바람둥이/conf의/server.xml을
이 두 개 이상의 웹 어플리케이션이 같은 최대 제한 및 미터를 공유하는 글로벌 풀을 제공합니다. db 엔진에 대한 전체 연결 수를 제어해야하는 경우 jdbc 설정을 저장해야합니다. Tomcat 관리자는 webapp를 배포하기 전에이 설정을 제자리에 두어야합니다.

편집 : 오. server.xml 파일의 <Context> 요소 안에 jdbc 설정을 넣었습니다. 글쎄, 그 경우에는 여전히 그 webapp-private pool이라고 생각합니다. 전역 풀이 필요하면 xml 파일의 맨 위에 <GlobalNamingResources> 요소 안에 추가하십시오.

+0

나는 이것에 대해 종교적으로 느껴지지 않는다. 그러나 나는 WEB-INF/lib를 선호하는데, $ webcat/lib에 jar 파일을 설치하는 것을 잊어 버리고 diff 웹 애플리케이션이 diff 버전의 DB를 사용한다면 때때로 버전 문제가 발생할 수도있다. –

+0

@Whome , 맑은 투명한 explination. 정말 고마워! – Tiwaz89

1

두 접근법 모두 장단점이 있습니다.
1. 응용 프로그램 수준 패키징은 App 로컬 연결 풀을 만듭니다.
2. Tomcat의 설정과 별도로
그러나 응용 프로그램의 환경 별 릴리스가 필요합니다.

Tomcat이 연결 풀을 유지하는 경우 앱은 "등록 된 이름"에만 의존하며 모든 패키지는 단일 패키지를 배포 할 수 있습니다.

그냥 응용 프로그램 레벨 패키징 톰캣-유지 연결 풀은 운영 친화적입니다 반면 개발자 중심이다, 요약합니다.