2018-10-4- 스프링 외부설정

외부설정

사용할 수 있는 외부설정

  1. application.properties : 스프링부트가 로딩할때 실행되는 컨벤션. Key-Value형태의 값을 띠고 있다.
  2. YAML
  3. 환경변수
  4. CommandLine Arguments

프로퍼티 우선순위

  1. 유저 홈디렉토리에 있는 spring-boot-dev-tools.properties
  2. 테스트에 있는 @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은 가용가능한 포트에서 랜덤값을 생성을 하는 것이다.
    1. @SprnigBootTest 어노테이션의 properties 애트리뷰트
    2. 커맨드라인아규먼트(java -jar target/springinit-0.0.1-snapshot.jar –keesun.name=whiteship)
    3. SPRING_APPLICATINO_JSON에 있는 프로퍼티

application.properties의 우선순위(높은게 낮은것을 덮어씁니다)

  1. file: ./config/
  2. file: ./
  3. classpath:/config/
Written on October 4, 2018