@Value
- 값을 넣어줄 변수위에 @Value("${xxx}")형태로 변수의 값을 붙여준다.
@RestController
@ConfigurationProperties(prefix = "limits-service")
public class homeController {
@Value("${kakao-api}")
private String kakoApi; // kakao-api 키에 대한 값이 들어온다.
@GetMapping("/")
public String home() {
return "home";
}
}
@ConfigurationProperties
- @ConfigurationProperties(prefix="service")와 같은 형태로 service.xx에서 xx와 이름이 일치하는 변수에 할당된다. 이 때 setter 혹은 생성자가 필요하다. -> setter는 위험하므로 생성자 사용 지향
- 만약 한 계층 더 있다면, 내부 클래스로 만들어준다.
- 최상단 클래스에 @Validated를 붙이고 validation 어노테이션을 붙여주면 값이 바인딩될 때 검증할 수 있다.
- @ConfigurationProperties(prefix = "a")일 때, a.b.c, a.b.d와 같이 있을 때 내부 클래스 b를 만들어주고 c와 d를 정의해주면 된다.
- 이후 해당 @ConfiguraionProperties에 대해 만들어진 클래스를 사용하려면, @EnableConfigurationProperties('해당 클래스'.class)와 같이 지정해주면 된다.
- 만약 @EnableConfigurationProperties가 아닌, 전역적으로 등록해주려면 XxxApplication 클래스에 들어가 @ConfigurationPropertiesScan 어노테이션을 붙여준다. -> 빈으로 등록해준다.
- 내부 클래스에 대해 @Validated를 붙일 필요가 없다.
- @Valid는 안되고 @Validated만 적용된다.