2018-10-4- 스프링 외부설정
외부설정
사용할 수 있는 외부설정
- application.properties : 스프링부트가 로딩할때 실행되는 컨벤션. Key-Value형태의 값을 띠고 있다.
- YAML
- 환경변수
- CommandLine Arguments
프로퍼티 우선순위
- 유저 홈디렉토리에 있는 spring-boot-dev-tools.properties
- 테스트에 있는 @TestPropertySource
@RunWith(SpringRunner.class) @SpringBootTest public class SpringbootStartingApplicationTests { @Autowired Environment environment; @Test public void contextLoads() { assertThat(environment.getProperty("jimmy.name")).isEqualTo("jimmy"); } }
- Module에 들어가서 test/resource폴더를 testResources로 등록을 한다. - build를 할때, 메인소스와 프로퍼티가 빌드가 되고, 그 다음 테스트디렉토리들이 빌드가 된다. 그때 test/resources/application.properties에 있는 설정들이 덮어쓰여진다. - ``` //application.properties jimmy.name=jimmy jimmy.age=${random.int} server.port=0
//test/resources/application.properties jimmy.name=jimmy ```
- 위의 설정으로 테스트코드를 Run하면 테스트코드가 깨지게 된다. Why? 테스트코드를 빌드할때, main/java main/resources의 파일들을 빌드하고 test디렉토리를 빌드하는데, main문의 application.properties에는 jimmy.age가 있지만, test/resources/application.properties에는 jimmy.age가 없기때문에 테스트가 깨진다.
- ${random.int}는 랜덤값을 생성을 하는데, server.port=0이랑은 다르다. server.port=0은 가용가능한 포트에서 랜덤값을 생성을 하는 것이다.
- @SprnigBootTest 어노테이션의 properties 애트리뷰트
- 커맨드라인아규먼트(java -jar target/springinit-0.0.1-snapshot.jar –keesun.name=whiteship)
- SPRING_APPLICATINO_JSON에 있는 프로퍼티
application.properties의 우선순위(높은게 낮은것을 덮어씁니다)
- file: ./config/
- file: ./
- classpath:/config/
Written on October 4, 2018