반응형

Spring Boot application.properties 설정 방법


Spring Boot를 이용할 때 대부분의 경우 설정 파일로 application.properties를 이용한다. 

application.properties는 기본적으로 Spring Boot가 읽어 들이도록 되어있기 때문에 사실 파일만 만들어서 'src/main/resources' 폴더에 넣어 주면 바로 설정 파일로 이용이 가능하다.

너무 쉬운 설정 방법이다.


사용법


# application.properties

name=propertiestest

# PropertiesTest.java

 import org.springframework.stereotye.*

 import org.springframework.beans.factory.annotation.*

@Component

public class PropertiesTest {

    @Value("${name}")

    private String name;

   // ...

}

위의 PropertiesTest 클래스의 name멤버변수는 @Value 어노테이션을 지정한 것으로 application.properties에 설정된 name=propertiestest 의 값인 "propertiestest" 입력 된다.

실질적인 어노테이션 import 부분은 import org.springframework.beans.factory.annotation.Value; 에 정의 된다. 

만약에 application.properties 파일에 name 값을 정의 하지 않았을때 default 값을 지정 하는 방법은 아래와 같다.

@Value 어노테이션에서 properties 선언변수 name 옆에 콜론(:)을 찍고 초기 값을 지정하면 된다.

   @Value("${name:testtest}")

   private String name;


   @Value("${snumber:1004}")

   private int snumber;

위처럼 선언을 하면 default 값은 application.properties에 정의 되어 있지 않아도 알맞게 변환되어 입력된다.


Spring Boot 문서에 보면 property source 설정 방법이 다양하게 정의 되어 있다.

1. Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).

 2. @TestPropertySource annotations on your tests.

 3. @SpringBootTest#properties annotation attribute on your tests.

 4. Command line arguments.

 5. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property)

 6. ServletConfig init parameters.

 7. ServletContext init parameters.

 8. JNDI attributes from java:comp/env.

 9. Java System properties (System.getProperties()).

10. OS environment variables.

11. A RandomValuePropertySource that only has properties in random.*.

12. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)

13. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)

14. Application properties outside of your packaged jar (application.properties and YAML variants).

15. Application properties packaged inside your jar (application.properties and YAML variants).

16. @PropertySource annotations on your @Configuration classes.

17. Default properties (specified using SpringApplication.setDefaultProperties).

우선순위는 1번부터 차례대로 정의 된다. 

위에 설명한 방식은 15번째 나오는 방법 입니다. 


우선순위에 대한 주의점은 하위방식으로 정의된 설정값들이 상위우선순위가 있을 경우 완전히 무시 되는 구조가 아니고 

하위 우선순위부터 순차적으로 덮어 씌워 지는 방식으로 설정 된다고 해야 한다. 

만일 하위에만 설정되어 있는 number 값이 있다고 한다면 상위 property에 number에 대한 정의가 없을 경우 하위에 정의된 값을 그대로 사용한다.


위 17개의 우선 순위중 테스트 환경을 제외하고 4번째인 Command line arguments 부분이 가장 우선순위가 높게 사용할 수 있다.

command line을 이용하는 방법은 다음과 같다. 서버 console에서 사용하는 방법이라 이해하면 편할 듯하다.

$ java -jar testapp.jar --snumber=2000

콘솔창에서 바로 정의 하여 실행을 해볼 수 있다. 



반응형

+ Recent posts