자라선

11. 외부설정 본문

Develop/Spring Boot

11. 외부설정

자라선 2020. 7. 27. 16:14

application.properties 불러오는 방법

Application.properties 에서 정의된 값은 @Value 어노테이션이나 SpringBootBean에 등록되어있는 Environment bena을 의존성 주입하여 사용할 수 있다.

 

application.properties
test.name=thkong
 
@Value("${test.name}")
private String name;

또는

    @Autowired
    Environment environment;
 
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("프로퍼티 값 : " + environment.getProperty("test.name"));
    }

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)


빌드 순서

빌드시 처음에 main 하위의 java resources의 파일들을 컴파일 하여 classpath에 등록한다.

그 후 테스트를 컴파일 후 classpath에 등록을 하는데 그 때 application.properties

test에 있는 것으로 오버라이딩 된다.

main -> test -> application.properties change

 


Propertiesrandom 또는 변수 재정의

application.properties 에서 랜덤 값을 생성 할 수 있다.

test.random=${random.int}

 

이미 정의한 변수를 재활용할 수 있다. 플레이스 홀더

name = taehyun
fullname = ${name} Kong

properites의 변수들을 vo 생성

application.properties에 정의되어 있는 변수들을 매번 @ValueEnvironment 로 주입받아 사용 할 수도 있지만 따로 vo로 정의받아서 바인딩할 수 있다.

이 경우 기존의 @Value 와 다르게 타입세이프가 된다는 장점이 있다. (properties에 정의된 변수의 값이 정수인지 문자열인지 구분이 안가는것을 vo에서 정의)

또한 Relaxed Binding(융통성 바인딩)을 지원한다.

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
test.name=thkong
test.age=19
@Component
@ConfigurationProperties("test")
public class TestProperties {
 
    private String name;
 
    private int age;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
}

 

·        융통성 있는 바인딩

context-path (케밥)

o   context_path (언드스코어)

o   contextPath (캐멀)

o   CONTEXTPATH

·        프로퍼티 타입 컨버전

o   @DurationUnit

·        프로퍼티 검증

o   @Validated

o   JSR-303 (@NotNull, ...)

·        메타 정보 생성

·        @Value

o   SpEL 을 사용할 수있음

o   위의 기능은 안됨

 

'Develop > Spring Boot' 카테고리의 다른 글

13. Logging  (0) 2020.07.27
12. Profile  (0) 2020.07.27
10. SpringApplication 기본  (0) 2020.07.27
9. JAR 실행 및 패키징 원리  (0) 2020.07.27
8. SSL or HTTP2 설정  (0) 2020.07.27
Comments