본문 바로가기
Dev/Spring Boot

[스프링 부트 개념과 활용] 외부 설정 1부

by dev_jsk 2020. 8. 21.
728x90
반응형

외부 설정 파일

Application에서 사용하는 여러가지 설정값들을 Application의 밖 또는 안에다가 정의할 수 있는 파일

사용할 수 있는 외부 설정

  • .properties
  • YAML
  • 환경 변수
  • Command Line Arguments

Properties

application.properties : 스프링 부트가 Application을 구동할때 자동으로 로딩하는 파일

// application.properties
jinseo.name=jinseo
@Component
@Order(1)
public class SampleRunner implements ApplicationRunner {
    @Value("${jinseo.name}")
    private String name;

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

Environment

@Autowired
Environment environment;
// getProperty("key") 를 이용해 설정값을 가져올 수 있다.
String name = environment.getProperty("jinseo.name");

 

테스트에서 외부설정 사용하기

테스트 실행 시 src/main -> src/test 순으로 빌드

즉, test 파일main 파일을 오버라이딩 한다. (명칭이 동일한 파일)

 

1. @SpringBootTest properties 속성 사용

@RunWith(SpringRunner.class)
@SpringBootTest(properties="jsk.name=jinseokim")
public class ApplicationTests {
    ...
}

2. @TestPropertySource 사용

@RunWith(SpringRunner.class)
@TestPropertySource(properties="jsk.name=jinseokim")
@SpringBootTest
public class ApplicationTests {
    ...
}

혹은 test/resource/test.properties파일을 생성하여 해당 경로를 지정하는 방법

@RunWith(SpringRunner.class)
@TestPropertySource(locations="classpath:/test.properties")
@SpringBootTest
public class ApplicationTests {
    ...
}

 

* VSCode Test Properties 설정

// Project 내 setting.json
"java.test.config": {"sourcePaths": ["classpath:/application.properties"]}

 

우선순위

높은 순위의 방법이 낮은 순위의 방법을 오버라이딩 한다.

 

Property 우선순위

1. 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties

2. 테스트에 있는 @TestPropertySource

3. @SpringBootTest 애노테이션의 properties 애트리뷰트

4. Command Line Arguments

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)

 

Property 파일 우선순위

resources/ 디렉토리 이외에도 application.properties가 위치할 수 있다.

위치에 따른 우선순위는 다음과 같다.

 

1. file:./config/ : 현재 파일시스템(root) 밑 config 디렉토리 내

2. file:./ : 현재 파일시스템(root) 밑

3. classpath:/config/

4. classpath:/

 

랜덤 값, 플레이스 홀더

// application.properties

// Random Number
random.value=${random.int}

// Placeholder
jinseo.firstname=Jinseo
jinseo.lastname=Kim
jinseo.fullname=${jinseo.firstname} ${jinseo.lastname}

 

참고

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config

 

Spring Boot Reference Documentation

This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe

docs.spring.io

 

728x90
반응형

댓글