스프링에서 외부설정을 조회하는 방법
@Value
@ConfigurationProperties
Environment
getProperty(key, type)
getProperty()
메서드를 매번 사용하는 것은 번거로움@Value
사용
@Value
**로 읽어올 수 있음${}
**로 감싸지 않고 작성한 경우 문자 그대로를 바인딩${}
**를 사용해서 key를 넣어주면 받는 필드 변수 타입으로 외부 설정을 받을 수 있음${}
**내부에 작성한 값을 후처리기를 통해 변환하여 처리 따라서 변수 final 설정이 불가능${key: (기본값)}
**를 통해 기본값을 설정@ConfigurationProperties
스프링은 외부 설정의 묶음 정보를 객체로 바인딩하며 타입 안전한 설정 속성이라고 함
객체를 사용하면 타입을 사용할 수 있으며, 타입이 잘못 들어오는 문제도 방지
Prefix
@ConfigurationProperties
어노테이션을 사용하면, 해당 객체는 설정 정보를 바인딩할 객체라는 것을 명시하게 됨my.datasource.XXX
**형식으로 작성된 설정정보는 해당 객체를 통해 바인딩하겠다고 명시@EnableConfigurationProperties
**를 통해 해당 객체를 활성화하면 빈으로 등록되어 원하는 곳에서 주입받아 사용할 수 있게됨@ConfigurationPropertiesScan
@ConfigurationProperties
를 작성해도 @EnableConfigurationProperties
를 통해 활성화를 해야 했는데@ConfigurationProperties
를 모두 활성화해줄 수 있음바인딩 과정
@ConstructorBinding
@DefaultValue
@Value
어노테이션은 기본값을 설정할 수 있었는데@DefaultValue("default")
를 통해 가능하며, 이 명령은 기본값으로 **“default”**를 선언자바 빈 검증기
참조: 자바 빈 검증기
설치
implementation: 'org.springframework.boot:spring-boot-starter
-validation'
사용
@Validated
어노테이션을 통해 활성화@NotEmpty
: 해당 값이 반드시 있어야함@Min
: 해당 필드의 최소값 명시@Max
: 해당 필드의 최대값 명시@DurationMin(seconds = 1)
: 해당 필드는 최소 1초의 값만 가짐@Profile
@Conditional
어노테이션을 사용해서 조건에 따라 작동