2013-02-27 4 views
3

내 응용 프로그램에는 서버간에 변경하려는 특정 매개 변수 (문자열)가 있습니다.부두 사용자 정의 구성

예를 들어, 해당 매개 변수 중 하나는 서버가 프로덕션 환경인지 여부를 나타내는 예/아니오 값입니다. 다른 하나는 응용 프로그램이 실행중인 특정 시스템에서 주어진 자원의 파일 경로입니다. 기타

제티 웹 서버의 디렉토리 구조에 별도의 구성 파일 (일반 텍스트, xml, JSON 또는 다른 간단한 형식)로이 값들을 보관하고 싶습니다.

추가 소프트웨어를 설치하거나 복잡한 부두 옵션을 구성 할 필요없이 키로 또는 내 서블릿에서 문자열 값을 간단히 검색 할 수있는 방법이 있습니까? 나는 정말로 검색해야하는 단지 두세 가지 값에 대한 합병증을 피하고 싶습니다.

EDIT : 웹 프레임 워크, 스프링 등이없이 서블릿을 직접 사용하고 있습니다. 소프트웨어는 스칼라로 코딩되어 있습니다.

JNDI는 아마도 내가 필요한 것을 할 것이지만, 설정하는 것이 더 간단 할 것입니다.

내가 ServletConfig와 같은 것을 찾고 있다고 생각하지만 서버 수준에서 웹 응용 프로그램 수준이 아닙니다.

+0

각 서버에서이 값으로 환경 변수를 정의하면 어떨까요? –

+0

일부 서버는 Windows이고 다른 서버는 Linux입니다. OS X에서 개발합니다. 모든 환경에서 일관된 무언가를 원했고 하나의 파일에서만 쉽게 편집 할 수있었습니다. – Eduardo

답변

3

다음은 간단한 예입니다. 당신의 부두 분포 디렉토리에서

이 있습니다 ( /start.ini 파일에있는 OPTIONS 구성을 통해 서버 수준의 클래스 로더에 기본적으로 포함되어있다)를 /resources/ 디렉토리가

당신이 만드는 경우 /resources/myconfig.properties와 (예를 들어) 다음과 같은 내용 :

food=fruit 
fruit.color=yellow 
fruit.name=banana 

는 그런 다음 초기화에 서블릿 부하를 가질 수()이 같은 :

public class LoadResourceServlet extends HttpServlet 
{ 
    private Properties props; 

    @Override 
    public void init(ServletConfig config) throws ServletException 
    { 
     super.init(config); 

     props = new Properties(); 
     URL url = this.getClass().getResource("/myconfig.properties"); 
     if (url != null) 
     { 
      try (InputStream stream = url.openStream()) 
      { 
       props.load(stream); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
    { 
     resp.setContentType("text/plain"); 

     try (PrintWriter writer = resp.getWriter()) 
     { 
      writer.printf("food = %s%n",props.getProperty("food")); 
      writer.printf("fruit.color = %s%n",props.getProperty("fruit.color")); 
      writer.printf("fruit.name = %s%n",props.getProperty("fruit.name")); 
     } 
    } 
} 
+0

재미있을 것 같습니다! 내 코드의 다른 부분에 getClass(). getResource()를 사용할 수 있습니까? (예 : 일부 싱글 톤 객체가 생성 될 때) 서블릿'init()'에서만'/ resources' 파일에 묶여 있습니까? – Eduardo

+0

.getClass(). getResource()는 기본 ClassLoader 개념입니다. 그것은 클래스 로더에있는 모든 것에서로드됩니다./resources/디렉토리의 경우에는 start.ini의 OPTIONS 행에 대한 참조로 이미 디렉토리 클래스 로더 참조로 제공됩니다. 서버 클래스 패스/클래스 로더의 내용을 보려면'java -jar start.jar --version' 배포판에서이 명령 행을 사용하십시오. –

+0

참고로, 나는 이미 자바에 구운 속성 파일을 사용하기로 선택했으며 추가 제 3 자 라이브러리없이 예제 작업을했다. 원하는 config 파일 형식을 사용할 수 있으며 URL 또는 InputStream에서로드하면됩니다. 위의 예에서 'url'이 null이면 구성 파일을 찾을 수 없음을 의미합니다. (내가 거기에서 오류를 던졌을 것 같아) –

관련 문제