2011-10-13 3 views
2

내 JAVA 프로그램에서 사용하는 속성 파일의 경로 사양을 구현 자체에서 분리하는 데 작은 문제가 있습니다. 프로그램이 다른 디렉토리 구조로 여러 위치에 배포 될 수 있으며 경로 사양을 프로그램 코드에 하드 코딩하지 않기를 바랍니다.속성의 하드 코딩 피하기 파일 경로 지정

지금 상황이 그대로입니다.

나는이 하나 개의 폴더 서버/2 개 패키지가 내부 (아래 많은 서브 패키지가 둘 다)/코어/& 지원

앞에서 잘 된 속성에 대한 경로가 파일을 어디서나이었다 있었다 무엇

필자는 상대 경로 즉 속성/ 을 지정했습니다.이 시나리오에서 프로그램을 시작하는 곳이면 속성 파일이 있어야합니다. 이것은 시험 도중, 수동으로 프로그램을 시작했을 때 "java"를 사용하여 작동했습니다. 그리고 나는 프로그램을 시작할 때마다 속성 폴더를 넣을 것이다. 그러나 실제 시나리오에서이 프로그램은 작업에 의해 예약 된 간격으로 실행되는 스크립트 (ksh)에 의해 자동 시작됩니다.

이 경우 상대 경로 지정이 작동하지 않습니다. 스크립트가있는 폴더에 속성 파일을 넣으려고했지만 그 중 하나가 작동하지 않습니다.

지금 당장은 각 환경에 대한 경로를 수동으로 지정하여 코드를 다시 컴파일하고 각 환경에 별도의 복사본을 배포해야합니다. 이 커플 링을 제거하고 배치해야하는 위치와 관계없이 특성 파일의 위치를 ​​하나만 가질 수 있습니까?

답변

3

경로를 지정하는 System.Properties 항목을 사용하여 다음 명령 줄에서 당신이 System.getProperty("myProp")로를 검색 할 수 있습니다 앱에서

java -DmyProp=somepath -cp yourclasspath YourClass 

를 통해 추가, 단지 적절한 테스트를 추가하고 처리해야 속성을 찾을 수 없습니다.

또 다른 연습은 항아리에 props를두고 LoadResource로로드하는 것입니다.이 방법으로 각 배치에 다른 config jar를 배포해야하지만 System.setProperty 방법이 가장 빠르다고 생각합니다.

+0

내 프로젝트에서 최종 병목 현상을 제거하는 데 도움이되었습니다. :) – angryInsomniac

0

일반적으로 일부 클라이언트는 응용 프로그램을 시작할 때 -D =를 사용하지 않을 수 있습니다. 실제로 jar 파일과 함께 .sh/.bat 스크립트 파일을 제공하여 클라이언트가 스크립트를 두 번 클릭하여 응용 프로그램을 실행할 수 있도록해야합니다.

이 스크립트에서는 변수를 선언하여 클라이언트에게 그에 맞게 구성하도록 요청할 수 있습니다. 클라이언트는 텍스트 편집기에서 스크립트 파일을 열고 구성 파일의 경로를 입력 할 수 있습니다.

이 스크립트 파일을 사용하는 다른 방법은 다음과 같습니다. 1) YOUR_APP_NAME_CONFIG 변수가 시스템 환경에 설정되어 있는지 확인하십시오. 그렇다면 3 단계로 가거나 2 단계로 가십시오. 2) 사용자에게 명령 행에서 설정 파일의 위치를 ​​묻습니다. 위치가 정확한지 확인하십시오. 올바른 경우 구성 파일의 위치 값과 함께 환경 변수 YOUR_APP_NAME_CONFIG를 설정하십시오. 3) 응용 프로그램 시작

응용 프로그램에 대한 스크립트 파일을 사용하면 응용 프로그램의 환경 구성을 자동화하는 데 많은 일을 할 수 있습니다. 응용 프로그램에서 System.getProperty ("YOUR_APP_NAME_CONFIG")에 의해 구성 파일 경로를 가져옵니다.

이 모든 것이 많은 고통처럼 보일 수 있지만 고객의 관점에서 생각해보십시오. 그 케이크는 클라이언트를 위해 걸어서 스크립트를 두 번 클릭하여 응용 프로그램을 시작하고 응용 프로그램을 처음 시작할 때 스크립트는 필요한 경우 몇 가지 입력을 요구 한 다음 응용 프로그램을 사용하는 것이 좋습니다 :)

0

내가 한 것은 통과 항아리 호출 또 다른 클래스 경로 매개 변수 ..

java -cp classpath1;folder-where-propertiesfile-located Application.jar

및 응용 프로그램에서 getClass().getClassLoader().getResourcesAsStream("properties-file");

이 자동으로 등록이 적절한 클래스 경로 폴더를 형성 파일을 가져옵니다 사용

..

이 설정을 사용하면 폴더 내의 속성 파일을 변경하고 jar 파일을 다시 아카이브하지 않고 동일한 jar 파일을 사용할 수 있습니다.