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);
}
}

- 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
'스프링 부트(핵심 원리와 활용)' 카테고리의 다른 글
| Ch05. 외부설정과 프로필(1) - 외부 설정(자바 시스템 속성) (0) | 2023.03.12 |
|---|---|
| Ch05. 외부설정과 프로필(1) - 외부 설정(커맨드 라인 인수, 커멘드 라인 옵션 인수, 커맨드 라인 옵션 인수와 스프링 부트) (0) | 2023.03.12 |
| Ch05. 외부설정과 프로필(1) - 외부 설정(OS 환경 변수) (0) | 2023.03.12 |
| Ch05. 외부설정과 프로필(1) - 외부 설정이란? (0) | 2023.03.12 |
| Ch05. 외부설정과 프로필(1) - 프로젝트 설정 (0) | 2023.03.12 |