@ConfigurationProperties
란?
- 스프링 부트의 애노테이션이다.
- 외부의 configuration properties 값을 매핑하기 위해 사용한다.
application.properties
에 하드코딩된 값을 자바 메모리로 가져오는 것이다.
왜 쓰는가?
- 타입 안정성: 코드 완성 및 리팩토링 기능과 같은 IDE 지원을 포함하여 강력한 속성 타이핑이 가능하다.
- 값 검증: JSR 303/349 애노테이션들을 이용해 강력한 값 검증 규칙을 추가하는 것이 가능하다.
- 계층 매핑: 계층이 있는 프로퍼티들을 편리하게 매핑할 수 있다. 보다 체계적이고 가독성이 높은 코드를 작성할 수 있다.
- 릴렉스 바인딩: 다양한 형태의 프로퍼티 이름을 지원한다. ex)
my-property
,my_property
,myProperty
- 문서 및 메타데이터: 도구 혹은 추가 기능에서 사용할 수 있는 메타데이터를 생성하는 데 도움이 된다.
용례
깊이 없는 프로퍼티 사용 용례
- 프로퍼티에 값을 추가한다.
- 아래의 값은
application-app.properties
에 추가된다.
app.name=My Application
app.timeout=30
- 해당 프로퍼티 값을 받을 클래스를 생성한다.
@Validated
애노테이션을 통해 JSR 303/349 검증 애노테이션을 사용할 수 있다.@ConfigurationProperties
를 사용하기 위해서는 @EnableConfigurationProperties 애노테이션을 통해 해당 기능을 활성화시켜주어야 한다.prefix = "app"
요소는application-
뒤에 붙는 문자를 표현한다.
@Validated
@ConfigurationProperties(prefix = "app")
public class AppProperties {
@NotBlank
private String name;
private int timeout;
// getters and setters
}
- 아래와 같이
@Autowired
애노테이션을 통해 값을 이용할 수도 있다. AppProperties
의 타입을 인식하고 값이 들어간다.
@Service
public class MyService {
private final AppProperties appProperties;
@Autowired
public MyService(AppProperties appProperties) {
this.appProperties = appProperties;
}
public String getAppName() {
return appProperties.getName(); // Using the app.name property
}
public int getAppTimeout() {
return appProperties.getTimeout(); // Using the app.timeout property
}
}
깊이 있는 프로퍼티 사용 용례
application-app.yml
에 아래의 값이 추가된다.
app:
auth:
token-secret: secret
token-expiration-time: 36000
oauth2:
redirect-uris:
- http://localhost:8080/auth/token
- 아래와 같이 클래스 안에 내부 클래스를 통해 중첩된 값을 받아올 수 있다.
@Getter
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private final Auth auth = new Auth();
private final OAuth2 oauth2 = new OAuth2();
@Getter
@Setter
public static class Auth {
private String tokenSecret;
private long tokenExpirationTime;
}
@Getter
public static class OAuth2 {
private List<String> redirectUris = new ArrayList<>();
public OAuth2 redirectUris(List<String> redirectUris) {
this.redirectUris = redirectUris;
return this;
}
}
}
레퍼런스
반응형
'프레임워크 > 스프링 프레임워크' 카테고리의 다른 글
스프링 WebMvcConfigurer 인터페이스란? (0) | 2023.07.31 |
---|---|
스프링부트 @EnableConfigurationProperties 애노테이션이란? (0) | 2023.07.30 |
스프링의 preHandle() 메서드란? (언제 실행될까?) (0) | 2023.07.26 |
스프링 RedisTemplate 이란? (0) | 2023.04.25 |
자바 애노테이션으로 빈을 구성하는게 XML 로 구성하는 것 보다 나은 이유 (0) | 2023.04.21 |