Spring Boot | 외부 설정 이용 | 속성 파일 이외의 설정 값을 전달

속성 파일 이외의 설정 값을 전달

Main.java

package sample.springboot;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(Main.class, args)) {
            Main m = ctx.getBean(Main.class);
            m.hello();
        }
    }

    @Value("${value}") private String value;

    public void hello() {
        System.out.println("value=" + value);
    }
}

커멘트 라인 인수

$java -jar build/libs/spring-boot-sample.jar --value=commandline

value=commandline
  • –[속성 이름]=[값]에서 커멘트 라인 인수에서 설정 값을 전달한다.

Java 시스템 속성

$java -Dvalue=systemproperty -jar build/libs/spring-boot-sample.jar

value=systemproperty
  • –D [속성 이름]=[값]에서 시스템 속성에서 설정 값을 전달한다.

OS 환경 변수

$ set value=osenvironment

$ java -jar build/libs/spring-boot-sample.jar

value=osenvironment

※ OS는 Windows이다.

기본 속성

Main.java

package sample.springboot;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        Map<String, Object> properties = new HashMap<>();
        properties.put("value", "default property");

        SpringApplication app = new SpringApplication(Main.class);
        app.setDefaultProperties(properties);

        try (ConfigurableApplicationContext ctx = app.run(args)) {
            Main m = ctx.getBean(Main.class);
            m.hello();
        }
    }

    @Value("${value}") private String value;

    public void hello() {
        System.out.println("value=" + value);
    }
}

실행결과

value=default property

SpringApplication#setDefaultProperties(Map<String, Object>) で、デフォルトの設定を指定できる。

우선 순위

속성 파일의 경우와 마찬가지로, 설정 값의 전달 방법에는 우선 순위가 있으며 우선 순위가 높은 방법이 낮은 방법으로 지정된 설정 값을 덮어 쓰기한다.

우선 순위는 다음과 같이 되어있다.

  1. 커멘드 라인 인수
  2. JNDI의 java : comp / env로부터 취득한 속성
  3. 시스템 속성
  4. OS 환경 변수
  5. jar 외부의 프로필 지정된 속성 파일
  6. jar 안에 있는 프로필 지정된 속성 파일
  7. jar 밖에 있는 속성 파일
  8. jar 안에 있는 속성 파일
  9. @PropertySource에서 지정된 속성 파일
  10. 기본 속성

숫자가 작은 쪽이 우선 순위가 높다.