본문 바로가기
JAVA

[ JAVA ] Property 파일 변경 된 사항 실시간 적용 되도록 하는 법

by 정윤재 2013. 5. 19.

어플리케이션을 작성할 때 property 파일만 수정하고 어플리케이션을 재시작 하지 않고

 

해당 사항이 반영 되길 원하는 경우가 있다. 최대한 부하가 생기지 않고

 

이런 일을 처리 할 수 있는 로직을 아래와 같이 작성해 본다.

 

 

=================================

 

package com.test;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.Properties;

 

 

public class PropertyUtil {

 

private static PropertyUtil propertyUtil = new PropertyUtil();

 

private static Properties propObj = null;

 

private static File propFile = null;

 

private static FileInputStream propStream = null;

 

private static long propLastModified = 0L;

 

/**

* 작성자 : 정윤재 

* 파라미터 : property 파일 안에 정의 된 property 개별 항목의 이름 

* return type : value

* 사용법 : 파라미터로 cms.password 이런식으로 질의함 (property 파일 안에는 cms.password=1234 이런식으로 정의 됨)

*/

public static String getProperty(String propName){

 

long lastModified = propFile.lastModified();

 

if(propLastModified < lastModified){

 

try{

propLastModified = propFile.lastModified();

 

propStream = new FileInputStream(propFile);

 

propObj.load(propStream);

 

propStream.close();

}catch(FileNotFoundException fnfe){

fnfe.printStackTrace();

}catch(IOException ioe){

ioe.printStackTrace();

}

 

}//if

 

return propObj.getProperty(propName);

 

}//getProperty

 

 

/**

* 작성자 : 정윤재 

* 파라미터 : property file 의 절대 경로

* return type : PropertyUtil

* 사용법 : 싱글턴을 변형시켜서 만든 것이므로 객체 생성 할 때 new 로 만들지 말고 getInstance를 사용하여 만들어야 함

*/

public static PropertyUtil getInstance(String propertyUrl){

 

if(propObj == null){

 

propObj = new Properties();

 

try{

 

propFile = new File(propertyUrl);

 

propLastModified = propFile.lastModified();

 

propStream = new FileInputStream(propFile);

 

propObj.load(propStream);

 

propStream.close();

}catch(FileNotFoundException fnfe){

fnfe.printStackTrace();

}catch(IOException ioe){

ioe.printStackTrace();

}

 

}

 

return propertyUtil;

}

 

}

 

 


댓글