2009-09-04 2 views
30

등록 정보 파일에서 구성 매개 변수를 읽는 Tomcat 배포를 만드는 데 수락되는 방법은 무엇입니까?등록 정보 파일을 사용하여 DB 연결 정보를로드하도록 Tomcat 구성

WAR 파일을 전달하고 클라이언트가 특정 디렉토리에서 특성 파일을 작성하거나 편집하는 것만을 요구하는 것이 좋을 것입니다. 이것은 일을하는 다소 일반적인 방법입니까? 이보다 더 좋은 접근법이 있습니까?

답변

14

우리는 WAR와 컨텍스트 XML 파일을 배포하여 tomcat/conf/Catalina/localhost 디렉토리에 배치하고 모든 경로에서 webapp을로드 할 수 있습니다. 참조 문서 here이 있습니다. 이것은 다음과 같은 장점을 제공합니다

  • 컨텍스트 매개 변수는 여기에 구성
  • 데이터 소스가 정의 할 수있는 웹 애플리케이션에 의해 읽고 여기에 구성 할 수 있습니다
  • 실제로 경우 있음을 의미합니다 파일 시스템, 어느 곳에서나 살 수있는 WAR Tomcat이 업그레이드되고이 단일 구성 파일 만 새 Tomcat 설치로 이동해야합니다. 웹 응용 프로그램과 다른 파일은 그대로 둘 수 있습니다.

정말로 등록 정보 파일이 필요한 경우 매개 변수를 설정할 수 있습니다 문맥 X에서 ML 파일에서 속성 파일을 가리킨 다음 ServletContextListener에있는 매개 변수를 읽고 속성 파일을 읽습니다.

9

우리는이 문제를 해결할 방법 :

  1. 클라이언트가 우리가 동의 자원 이름을 사용 GlobalNamingResources에 연결 풀을 생성하게한다. 데이터베이스 드라이버는 Tomcat의 클래스 경로에 있어야합니다.
  2. 우리의 전쟁 파일이 단순히 컨텍스트를 변경보다 전면 작업까지 조금 더 1 단계

에 구성된 연결 풀에 연결하는 ResourceLink이있는 META-INF/context.xml에 파일이 포함되어 있습니다. xml 연결 정보를 직접적으로 가져 오지만 시간이 지남에 따라 갚아야합니다. 개발 서버는 개발을 가리키는 GlobalNamingResources와 테스트 서버가 테스트 등을 가리 키도록 설정됩니다. 그러면 동일한 WAR 파일을 아무 것도 편집하지 않고 각 서버에 복사 할 수 있습니다.

이것은 특성 파일을 사용하지 않지만 동일한 목표를 달성한다고 생각합니다. 사용자/고객이 데이터베이스 연결 정보를 설정할 수 있습니다. GlobalNamingResource의

예 : 전쟁 파일의 context.xml의

<Resource name="jdbc/dbconnection" auth="Container" 
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" 
url="jdbc:oracle:thin:@127.0.0.1:1546:SID" 
username="scott" password="tiger" maxActive="8" maxIdle="4" 
validationQuery="select 1 from dual" 
testOnBorrow="true"/> 

예 :

<Context path="/MyWebApp" docBase="MyWebApp" debug="5" reloadable="true"> 
    <ResourceLink name="jdbc/dbconnection" global="jdbc/dbconnection" 
      type="javax.sql.DataSource"/> 
</Context> 
7

그것은 전쟁 지역 중 매장 구성에 좋은 연습입니다. WAR에서는 속성 파일을 찾을 기본 위치가 있습니다. 기본값이 작동하지 않으면 conf/Catalina/[host] 디렉토리의 컨텍스트 조각에 정의 된 JVM 매개 변수 또는 컨텍스트 매개 변수를 통해 위치를 지정할 수 있습니다. 예를 들어,

<Context docBase="/server/app.war" 
    swallowOutput="true" unpackWAR="false" useNaming="false"> 

    <Parameter name="config-file" value="/config/db.properties" override="true" /> 
</Context> 
관련 문제