스프링 부트(핵심 원리와 활용)

Ch05. 외부설정과 프로필(1) - 외부 설정(자바 시스템 속성)

webmaster 2023. 3. 12. 14:59
728x90

자바 시스템 속성(Java System properties)은 실행한 JVM 안에서 접근 가능한 외부 설정이다. 추가로 자바가 내부에서 미리 설정해 두고 사용하는 속성들도 있다.

자바 시스템 속성은 다음과 같이 자바 프로그램을 실행할 때 사용한다.

  • 예) java -Durl=dev -jar app.jar
  • -D VM 옵션을 통해서 key=value 형식을 주면 된다. 이 예제는 url=dev 속성이 추가된다.
  • 순서에 주의해야 한다. -D 옵션이 -jar 보다 앞에 있다.

JavaSystemProperties

@Slf4j
public class JavaSystemProperties {

  public static void main(String[] args) {

    System.setProperty("hello_key", "hello_value"); //어플리케이션 실행 시점에도 추가할 수 있다.
    String helloValue = System.getProperty("hello_key");
    log.info("helloValue: {}", helloValue);

    Properties properties = System.getProperties();
    for (Object key : properties.keySet()) {
      log.info("prop {} = {} ", key, System.getProperty(String.valueOf(key)));
    }

    String url = System.getProperty("url");
    String username = System.getProperty("username");
    String password = System.getProperty("password");

    log.info("user={}", url);
    log.info("username={}", username);
    log.info("password={}", password);
  }
}

 

실행 Property
  • System.getProperties() 를 사용하면 Map 과 유사한( Map 의 자식 타입) key=value 형식의 Properties 를 받을 수 있다. 이것을 통해서 모든 자바 시스템 속성을 조회할 수 있다.
  • System.getProperty(key) 를 사용하면 속성값을 조회할 수 있다.
  • 자바가 기본으로 제공하는 수 많은 속성들이 추가되어 있는 것을 확인할 수 있다. 자바는 내부에서 필요할 때 이런 속성들을 사용하는데, 예를 들어서 file.encoding=UTF-8 를 통해서 기본적인 파일 인코딩 정보 등으로 사용한다.

Jar 실행

jar로 빌드되어 있다면 실행시 다음과 같이 자바 시스템 속성을 추가할 수 있다.

java -Durl=devdb -Dusername=dev_user -Dpassword=dev_pw -jar app.jar

자바시스템속성은앞서본것처럼 -D 옵션을통해실행시점에전달하는것도가능하고,다음과같이 자바 코드 내부에서 추가하는 것도 가능하다. 코드에서 추가하면 이후에 조회 시에 값을 조회할 수 있다.

  • 설정: System.setProperty(propertyName, "propertyValue")
  • 조회: System.getProperty(propertyName)

참고로 이 방식은 코드 안에서 사용하는 것이기 때문에 외부로 설정을 분리하는 효과는 없다.

728x90