웹 개발

spring boot jar 외부에서 properties 파일을 읽는 방법

노루아부지 2020. 11. 22. 20:57

spring boot는 application.properties 파일을 통해 설정을 할 수 있습니다.

properties의 값은 @Value annocation을 통해 읽어올 수 있습니다.

 

# application.properties
noroo.test=test
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class Test implements ApplicationRunner {
    @Value("${noroo.test}")
    private String test ;

    @Override
    public void run(ApplicationArguments args) {
        System.out.println("=======");
        System.out.println(test);
        System.out.println("=======");
    }
}

 

Spring boot의 SpringApplication은 아래와 같은 우선순위로 application.properties를 읽는데, 그 우선순위는 다음과 같습니다.(밑으로 갈수록 우선순위가 낮아집니다.)

 

  1. spring-boot-devtools를 활성화 시켰을 때 $HOME/.config/spring-boot 디렉토리 안에서 제공하는 프로퍼티
  2. 테스트에  사용한 @TestPropertySource가 제공하는 프로퍼티
  3. @SpringBootTest 또는 슬라이스 테스트용 애노테이션의 properties 속성으로 제공하는 프로퍼티
  4. 커맨드 라인 argument
  5. SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는 프로퍼티
  6. ServletConfig 초기 매개변수
  7. ServletContext 초기  매개변수
  8. java:comp/env에 들어있는 JNDI 애트리뷰트
  9. 자바 시스템 프로퍼티(System.getProperties())
  10. OS 환경 변수
  11. RandomValuePropertySource
  12. JAR 밖에 있는 특정 프로파일용 application properties (application-{profile}.properties 또는 YAML)
  13. JAR 안에 있는 특정 프로파일용 application properties (application-{profile}.properties 또는 YAML)
  14. JAR 밖에 있는 application properties (application.properties 또는 YAML)
  15. JAR 안에 있는 application properties (application.properties 또는 YAML)
  16. @Configuration 클래스에 사용한 @PropertySource로 읽은 프로퍼티
  17. 기본 프로퍼티 (SpringApplication.setDefaultProperties)

 

start.spring.io 또는 intellij에서 spring boot 어플리케이션을 만들면 기본적으로 application.properties 파일이 src/main/resources에 생성되는데 그 파일이 바로 15순위에 해당합니다.

 

 

또한 spring boot에서는 application.properties의 위치에 따라서 설정값의 우선순위가 결정됩니다.

그 우선순위는 다음과 같습니다.

  1. file: ./config/(프로젝트 root 디렉토리의 /config 디렉토리)
  2. file: ./(프로젝트 root 디렉토리)
  3. classpath: /config/  (classpath(java  jar 실행 위치)의 config 디렉토리)
  4. classpath: /(클래스패스 디렉토리)

 

 

만약 정해진 위치 이외의 properties 파일을 사용하고 싶다면 아래와 같이 경로를 지정할 수 있습니다.

java -jar -Dspring.config.location=<path-to-file> myBootProject.jar

 

 

 

 

 

 

 

[참고]

stackoverflow.com/questions/41754459/spring-boot-how-to-read-properties-file-outside-jar

docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

 

728x90
loading