대부분의 프로그램들에서 설정이라는 것이 필요하다. 간단히 웹서버의 예를 들면... - 어떤 포트를 사용할 것인지 - 홈 디렉토리 지정 - 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]
|