2012-08-14 3 views
1

Java 웹 응용 프로그램을 사용하면 응용 프로그램을 배포 할 때 속성 파일을 한 번만 읽는 방법 (나중에 싱글 톤으로 저장)은 어떻게됩니까? 즉, 구성 변경시 재배포가 필요합니다.웹 응용 프로그램을 배포하는 동안 .properties 파일을 한 번만 읽음.

그렇지 않으면 앱이 .properties 파일을 계속 읽지 못하도록하는 다른 방법이 있습니까? 이전에는 web.xml 파일에 설정이 있지만 지금은 .properties가 필요합니다. 당신은 web.xml에서이 클래스를 참조해야

public class PropertiesReadingListener implements ServletContextListener { 
    @Override 
    public void contextInitialized(ServletContextEvent event) { 
     //read properties here... 
     event. 
      getServletContext(). 
      setAttribute("db_name", p.getProperty("DATABASE_NAME")); 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent event) { 
    } 
} 

:

<listener> 
    <listener-class>com.example.PropertiesReadingListener</listener-class> 
</listener> 
+0

의 중복 가능성 [자바 EE 엔터프라이즈 응용 프로그램 : 배포/시작에 대한 몇 가지 작업을 수행 (http://stackoverflow.com/questions/6120831/java-ee-enterprise- –

+0

@ JigarJoshi 시작 속성 읽기 문제를 찾을 때 그 질문을 찾지 못했습니다. – yosh

+0

대부분의 Java 컨테이너 클래스 로더는 클래스 패스에서 읽은 내용을 캐시합니다. 클래스 경로 ('/ WEB-INF/classes' 폴더에 있음)에 저장된 프로퍼티 파일을 변경하면 위의 코드를 여러 번 실행하더라도 재배포까지 애플리케이션에 변경 사항이 표시되지 않습니다. –

답변

3

:

코드는 JBoss의 구성 경로에서 응용 프로그램 설정을 읽는 데 사용 ServletContextListener에 대한 또 다른 대안 인 JEE6 싱글 시작 콩을 사용하여 수 :

@Singleton 
@Startup  
public class PropertyRegistry { 

    @PostConstruct 
    private void init(){ 
    //do something 
    } 
} 
+0

+1하지만 질문에 정확히 중복됩니다 :) –

+1

@ JigarJoshi : 사실이지만 "* 싱글 톤 *"과는 반대로 서블릿 컨텍스트에 속성을 배치하는 방법에 대한 팁을 추가 했으므로이를 위해 그대로 두겠습니다.). –

+0

사실, 멋지다, 나는 이미 +1했다 –

4

시작 자신의 ServletContextListener을 구현

File f = new File(System.getProperty("jboss.server.config.dir"), 
        "myappsettings.properties"); 
Properties p = new Properties(); 
p.load(new FileInputStream(f)); 
try { 
    db_name = p.getProperty("DATABASE_NAME")); 
    file_path = p.getProperty("FILE_PATH")); 
    ... 
} catch (Exception e) { 
    ... 
} 
+0

+1, 매우 깨끗한 접근 –

관련 문제