Where The Streets Have No Name

Commons Configuration 본문

Developement/Java

Commons Configuration

highheat 2006. 10. 9. 10:51

자바를 이용하여 웹 서버 프로그램을 할때 환경설정 파일을 아주 쉽게 다룰수 있는 컴포넌트가 있다.

여기서 환경설정 파일이라 하면 웹서버나 WAS 의 특정 상수값이나, 문자열을 텍스트파일에 저장하여 유용하게 사용할 수 있는 파일로, 굳이 형식을 따지자면 일반 텍스트파일 및 xml 두가지로 구분지을 수 있다.(예, env.conf, env.xml)

환경파일에 있는 값을 읽고/수정 하는 괜찮은 유틸을 직접 만들어 사용하려면 적어도 2일은 소비해야 하나 거져 먹을 수 있는 방법을 소개한다.

아파치 재단의 commons configuration 컴포넌트를 사용하면 아주 쉽게 환경파일을 제어 할 수있다.

예를 들어 아래와 같이 상속을 받아서 클래스를 만들면 이것으로 끝이다.

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

/**
 * 클래스 설명: env.conf 파일에 있는 데이터를 읽고/수정하기 위한 클래스이다.
 */
public class Config extends PropertiesConfiguration {

    private static Config config;

    private Config() throws ConfigurationException {
        super(System.getProperty("env.conf"));
    }

    public static synchronized Config getConfig() throws ConfigurationException {
        if (config == null) {
            config = new Config();
        }
        return config;
    }
}

위 예제에서 super(System.getProperty("env.conf")); 은 env.conf 환경파일의 위치를 부모클래스에 할당하는 부분으로 env.conf 는 환경변수로 설정하거나 아니면 웹서버나 WAS 실행시 -Denv.conf=/app/fooboo/conf/env.conf 이런식으로 -D 옵션에 명기해 주면 된다.

Config 클래스를 이용하여 여러 타입의 상수값을 환경파일에서 얻어 올 수 있으며 저장할 수도 있다. 환경파일의 값을 가져다가 사용하는 클래스에서는 아래와 같이 사용하면 된다.

Config config = Config.getConfig();

int client_cnt = config.getInt("client_cnt");

이러면 env.conf 파일안에 client_cnt  = 1 로 정의되어 있다면 1 을 int 타입으로 리턴할 것이다.

String 타입의 값을 얻어오려면 String path = config.getString("classpath"); 이런식으로 사용하면 된다.

환경파일에 새로운 값을 저장하려면

config.setProperty("client_cnt", "10");

config.setProperty("classpath", "/app/fooboo/WEB-INF/classes");

config.save();

이런식으로 해주면 된다. 마지막에 save() 메소드를 호출해야 한다는 것에 주의하면 된다.

Reference is 아파치 commons configuration