-
application.properties 등의 외부 설정Spring/Spring Boot 2020. 6. 13. 23:50
1. application.properties
- 이런 외부 설정 파일은 App에서 사용하는 여러 설정값들을 정의할 수 있는 기능이다.
- 이 파일은 스프링 부트가 App을 구동할 때 자동으로 로딩하게 된다.
이렇게 정의되있는 파일 안에 key value 형태로 어떤 값을 정의하게 되면
App에서 참조해서 사용할 수 있게 된다.
그중 아주 간단한 방법을 한번 봐보자
이런 사용할 수 있는 외부 설정에는 properties, 야믈(YAML) 파일, 환경 변수 등이 있고
이 properties 들은 또 우선순위가 나뉜다.
1. 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties
2. 테스트에 있는 @TestPropertySource
3. @SpringBootTest 애노테이션의 properties 애트리뷰트
4. 커맨드 라인 아규먼트
5. SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티)에 들어있는 프로퍼티
6. ServletConfig 파라미터
7. ServletContext 파라미터
8. java:comp/env JNDI 애트리뷰트
9. System.getProperties() 자바 시스템 프로퍼티
10. OS 환경 변수
11. RandomValuePropertySource
12. JAR 밖에 있는 특정 프로파일용 application properties
13. JAR 안에 있는 특정 프로파일용 application properties
14. JAR 밖에 있는 application properties
15. JAR 안에 있는 application properties
16. @PropertySource
17. 기본 프로퍼티 (SpringApplication.setDefaultProperties)
- 메이븐이나 그레들을 통해 하나의 jar파일을 만든 후 실행할 때
- 다음과 같이 커맨드 라인 아규먼트(4)를 사용해서 만들 수 있다.
- 이는 우선순위 4번을 갖는다.
- 다음은 우선순위 3번을 갖는다.
- 다음은 우선순위 2번을 갖는다.
- 모든 Property들은 기본적으로 Environment를 통해서 확인 가능하다.
- 그런데 테스트 용으로 Property를 바꾸려면 test에 resources 디렉터리 밑에
- application.properties를 복사해서 넣으면 된다.
- 테스트 코드 실행 전에 테스트 코드 빌드된다.
- 빌드 시 src 밑에 있는 java부터 application.properties가 소스를 빌드한 시점에 classpath에 들어간다.
- 그다음 테스트 코드를 빌드하고 classpath에 넣게 되는데
- 그때 application.properties 가 바뀌게 된다.
- 따라서 실질적으로 테스트를 돌릴 때 seungyeolnmae= baek 가 읽히게 된다.
- 즉 application.properties 가 오버 라이딩되기 때문에 테스트용 properties가 다를 때는 조심해야 한다.
이 같은 application.properties는 같은 위치에 놓았기 때문인데 다른 위치에 놓을 수도 있다.
그리고 각자 다른 우선순위를 가진다. ( 1이 높음 )
1. 현재 /config/ 에 놓기 ( file../config/ )
2. 현재 디렉터리에 ( file:../ )
3. resources 밑 config 밑 ( classpath:/config/ )
4. 앞 서 본 resources 밑 ( classpath:/ )
'Spring > Spring Boot' 카테고리의 다른 글
RestTemplate, WebClient (0) 2020.07.13 JSR-303 Errors들을 Json으로 Serialization 해보자 (0) 2020.06.25 스프링 부트 MySQL8 연동 Intellij (0) 2020.06.23 내장 서블릿 컨테이너 응용 해보기 (0) 2020.05.14 내장 웹 서버 이해 (0) 2020.05.02