보통 운영에 필요한 설정 정보들을 properties 혹은 yml에 작성해 관리하는데, 위 파일들에 작성한 내용들을 Spring Bean으로 등록되는 클래스 내의 바인딩해 활용할 수 있다.
아래와 같은 설정 정보가 있다고 가정해보자.
#application.properties
jwt.secret-key: testSecretKey
jwt.expire: 3600
#application.yml
jwt:
secret-key: testSecretKey
expire: 3600
먼저 @Value 어노테이션을 사용한 예시이다.
@Component
public class JwtProperties {
@Value(“${jwt.secret-key}”)
private String key;
@Value(“${jwt.expire}”)
private int expire;
…
…
}
위 방법 이외에도 클래스 파일에 직접 바인딩 시키는 방법이 있는데
@ConfigurationProperties 어노테이션을 활용하는 방법이다.
먼저 dependency에 오토 컴플릿을 지원하기 위해 아래와 같이 추가한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
그 후 바인딩 시킬 클래스 파일을 Bean으로 등록한 후 @ConfigurationProperties 어노테이션을 추가한다(prefix를 지정).
참고) properties에 존재하는 _ 혹은 - 또한 바인딩 가능
@Component
@ConfigurationProperties(prefix=“jwt”)
public class JwtProperties {
private String key;
private int expire;
setter….
…
…
}
@ConfigurationProperties를 사용시 해당 설정 클래스가 유효한지 체크하는 validate 기능을 사용할 수 있다.
@Validated
@Component
@ConfigurationProperties(prefix=“jwt”)
public class JwtProperties {
@NotBlank
private String key;
@Min(...)
@Max(...)
private int expire;
setter…
…
…
}
@Value 어노테이션을 사용하면 SpEL을 사용할 수 있지만, @ConfigurationProperties를 사용시 SpEL을 사용할 수 없다.