블로그 이미지
좋은느낌/원철
이것저것 필요한 것을 모아보렵니다.. 방문해 주셔서 감사합니다..

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

Notice

    2008. 6. 17. 14:23 개발/Java
    출처 : http://www.ibm.com/developerworks/kr/forums/dw_thread.jsp?forum=26&thread=2517&cat=4

    commons-configuration 를 이용한 프로그램 설정 다루기
     

    대부분의 프로그램들에서 설정이라는 것이 필요하다.
    간단히 웹서버의 예를 들면...
    - 어떤 포트를 사용할 것인지
    - 홈 디렉토리 지정
    - DB 연동시 JDBC 드라이버 지정 및 URL 과 계정 정보
    이런 것들이 필요할텐데 간단히 프포퍼티 파일을 만들어서 JDK에서 기본으로 제공되는
    프포퍼티 클래스를 이용할 수도 있다. 그러나 JDK에서 기본으로 제공되는 클래스는
    기능이 단순하고 제한적이다. 예를 들어 스트링 타입으로만 처리되기 때문에 다른 타입의
    값을 원할때는 개발자가 모두 처리를 해주어야 한다. 또한 한글 처리도 매끄럽지 못하다.
    이런 이유들로 인해 간단한 설정 처리 프로그램을 만드는데에도 에러가 많아지고 그에 따는
    시간과 노력이 들어가게 된다. 그러나 걱정할 필요가 없다. commons-configuration 를
    이용하면 이런 대부분의 노력이 필요 없게 된다.
    애래에서처럼 프로퍼티 파일을 만들고 자바 프로그램을 실행시켜보면
    commons-configuration 의 일부 기능이지만 얼마나 좋은 것인지 알게 될 것이다.

    * commons-configuration 은 다른 라이브러리들에 의존성이 있다.
    commons-logging, commons-lang, commons-collections 라이브러리들도 포함시킨다.

    * test.prop 파일의 내용
    project.home = D:/dev/commons-configuration
    port = 8080
    debug = false
    temp.home = D:/새 폴더

    jdbc.driver = com.mysql.jdbc.Driver
    jdbc.driver = jdbc.odbc.JdbcOdbcDriver
    jdbc.driver = oracle.jdbc.driver.OracleDriver
    jdbc.driver = com.sybase.jdbc.SybDriver

    mysql.host = localhost
    mysql.db = test
    mysql.user =


    * 프로그램 소스
    import org.apache.commons.configuration.Configuration;
    import org.apache.commons.configuration.PropertiesConfiguration;

    public class PropertyTest {
    Configuration config;

    public void load() {
    try {
    // 프로퍼티 파일 로딩
    this.config = new PropertiesConfiguration("test.prop");
    }
    catch (org.apache.commons.configuration.ConfigurationException e) {
    System.err.println(e.getMessage());
    }
    }

    public void test() {
    try {
    String projectHome = config.getString("project.home");
    System.out.println("project.home = [" + projectHome + "]");

    // int primitive type, int 타입으로 즉시 사용 가능
    int port = config.getInt("port");
    System.out.println("port = [" + port + "]");

    // boolean primitive type, boolean 타입으로 즉시 사용 가능
    boolean debug = config.getBoolean("debug");
    System.out.println("debug = [" + debug + "]");

    // 한글도 이상 없다
    String tempHome = config.getString("temp.home");
    System.out.println("temp.home = [" + tempHome + "]");

    // String array type, 키와 값이 쌍으로 배열처럼 처리
    String[] jdbcDrivers = config.getStringArray("jdbc.driver");
    for (int i = 0; i < jdbcDrivers.length; i++) {
    System.out.println("[" + jdbcDrivers + "]");
    }

    // 값이 지정되어 있지 않는 경우, 예외를 발생하지 않는다
    String mysqlUser = config.getString("mysql.user");
    System.out.println("mysql.user = [" + mysqlUser + "]");

    // 키가 존재하지 않는 경우, 키가 존재하지 않는 경우에 값이 null
    String mysqlPassword = config.getString("mysql.password");
    System.out.println("mysql.password = [" + mysqlPassword + "]");

    // 키가 존재하지 않더라도 기본값을 지정되는 경우
    String defaultPassword = config.getString("mysql.password", "admin");
    System.out.println("mysql.password = [" + defaultPassword + "]");

    }
    catch (org.apache.commons.configuration.ConversionException e) {
    System.err.println(e.getMessage());
    }
    }

    public static void main(String[] args) {
    PropertyTest prop = new PropertyTest();
    prop.load();
    prop.test();
    }

    }

    * 실행 결과
    project.home = [D:/dev/commons-configuration]
    port = [8080]
    debug = [false]
    temp.home = [D:/새 폴더]
    [com.mysql.jdbc.Driver]
    [jdbc.odbc.JdbcOdbcDriver]
    [oracle.jdbc.driver.OracleDriver]
    [com.sybase.jdbc.SybDriver]
    mysql.user = []
    mysql.password = [null]
    mysql.password = [admin]

    posted by 좋은느낌/원철