2010-07-28 4 views
2

설정 파일과 dev 또는 prod 환경과 관련하여 얻지 못한 것이 있습니다.Java Webapp : .war에 대한 dev/prod 빌드 정보 캐치 22

을 설치해야 .WAR 및 dev에 환경의 지점이 .WAR 잘 작동하는지 테스트하기 위해, 잘되고 있기 때문에 (dev에와 자극에 같은 .WAR를 사용하려는 경우, 따라서 .war을 테스트하고 싶지 않고 또 다른.war 오른쪽을 배포 하시겠습니까?) 그런 다음 환경 설정이 dev 또는 prod인지 여부를 알려주는 config 파일은 어디에 있습니까?

모든 것이 잘 보이는 경우/알렉스 다음 .WAR 및 테스트 (OS X)에 로컬로 내가있어 사용자 /사용자, 내가있는 리눅스 머신에 배포 할 말하는 /홈/바람둥이/ 레퍼토리.

어디에서 어떻게 설정 파일에 액세스 할 수 있습니까?

사람들이 두 가지 다른 것을 구축하고 있다고 말하지 마십시오. .war dev에 대한 및 빌드가 올바르게 빌드됩니다. 그건 좀 목적을 완전히 물리 칠 것입니다 ...

+0

Catch-22는 무엇입니까? 위키 문서를 읽었지만 얻지 못했습니다. – OscarRyz

+0

@OscarRyz : This Wikipedia http://en.wikipedia.org/wiki/Catch-22_(logic)? 기본적으로 영어로 자주 사용됩니다. 여기서는 "테스트"환경의 전체적인 점이 * .war *을 테스트하는 것이지만 테스트를 수행 할 수 있다고 설명 했으므로 * .war *을 수정해야합니다. 처음에는 테스트 목적이었습니다. * .war *을 테스트하지 않았기 때문에 테스트를 시작했습니다. 그래서 그것은 일종의 캐치 22입니다. 그것은 멋진 역사를 가진 멋진 용어입니다 (그리고 저는 영어 원어민이 아닙니다). – NoozNooz42

+0

@OscarRyz : Catch-22 (내가 생각하기에)의 예는 다음과 같습니다. 금고를 열고 싶습니다. 그러나 이것을 위해서는 금고의 열쇠를 찾아야합니다. 그러나 금고의 열쇠는 금고 내부에 있음을 알고 있습니다 (따라서 금고를 열 수 없습니다). 그것은 내가 말할 수있는 한 Catch-22입니다. – NoozNooz42

답변

1

한 환경에서 다른 환경으로 이동하기 위해 WAR를 다시 작성하고 싶지는 않습니다.

물론 구성을 데이터베이스에 외부화 할 수는 있지만, 스프링을 사용하면별로 도움이되지 않습니다.

또 다른 생각은 각 환경에 이름이 포함 된 구성 파일을 설정하는 것입니다 (예 : "config-devl.xml", "config-test.xml", "config-prod.xml"). 접미사 값과 일치하는 환경마다 환경 변수를 설정하십시오. 시작시 환경 변수에 의해 설정된 접미사 값으로 구성 파일을 읽게하십시오.

+0

아직 봄을 사용하지는 않았지만 봄과 호환되는 DB의 외부화가 아닌 이유는 무엇입니까? (묻고 싶은 마음이 알고 싶어 :) – NoozNooz42

+0

그것은 구성을 위해 XML이나 주석을 사용합니다. – duffymo

2

이것은 몇 가지 해결책이있는 일반적인 문제입니다.

(내 경험상) 대부분의 사람들이 사용하는 것으로 보이는 것은 .war 파일을 생성하는 빌드 스크립트를 갖는 것입니다. 빌드 스크립트는 Ant 또는 Maven이 될 수 있지만, 별 상관이 없지만 Ant는 설정하는 데 약간의 작업이 필요합니다.

그런 다음 모든 다른 환경에서 데이터베이스 액세스 등을위한 모든 속성을 포함하는 마스터 속성 파일 (또는 이와 비슷한 파일)이 있습니다. 그런 다음 빌드 스크립트를 실행하면 올바른 위치에 속성을 설정하기 만하면 기본적으로 다른 환경에 맞게 구성한 동일한 .war 파일을 갖게됩니다.

메이븐 (Maven)은 이것을 거의 "즉시 사용"합니다 - profiles을보십시오.

+0

+1 이것은 우리가하는 것입니다. 우리는 개미를 사용하고 설정하기가 너무 어렵지 않습니다. – JoseK

1

주위의 가장 좋은 방법은 .war 외부에서 환경 특정 구성을 작성하는 것입니다. 그렇게하면 다른 환경에서 별도의 구성으로 동일한 전쟁을 전개 할 수 있습니다. 는 config에 도착

은 여러 가지 방법으로 수행 할 수 있습니다

  • 장소 설정이 응용 프로그램 서버 클래스 경로에로드됩니다 lib 디렉토리 또는 유사한 $ CATALINA_HOME /에.

  • 응용 프로그램을 실행하는 사용자의 홈 디렉토리에 배치하고 응용 프로그램이 해당 위치를 가리 키도록하십시오.

  • 일부 JNDI 마법을 수행합니다 (일반적으로 이것은 나에게 너무 어렵 기 때문에 명확하지 않습니다).

배포에 대해 더 확실하게하려면 Capistrano과 같은 배포 도구를 사용할 수 있습니다. 종종 devs는 응용 프로그램이 실행되는지 확인하기 위해 겉만 번지르른 구성에 대한 사전 배포 온 전성 검사를 수행합니다 (아직 테스트하지 않았 음).

관련 문제