스프링에서 Properties를 읽는 방법
YAML파일에 설정한 key 갑을 @Value
의 프로퍼티 값으로 주면 해당 값이 필드에 할당
키를 정확히 입력해야 하며, 없을 경우 예외처리가 필요
주로 단일 필드 값을 가져오는데 사용
application.yml
property:
test:
name: property depth test
propertyTestValue: test
propertyTestList: a,b,c
@SpringBootTest
public class ValueTest {
@Value("${property.test.name}")
private String propertyTestName;
@Value("${propertyTestValue}")
private String propertyTest;
@Value("${noKey:default value}")
private String defaultValue;
@Value("${propertyTestList}")
private String[] propertyTestArray;
@Value("#{'${propertyTestList}'.split(',')}")
private List<String> propertyTestList;
@Test
@DisplayName("VALUE_ANNOTATION_TEST")
void VALUE_ANNOTATION_TEST(){
assertThat(propertyTestName).isEqualTo("property depth test");
assertThat(propertyTest).isEqualTo("test");
assertThat(defaultValue).isEqualTo("default value");
assertThat(propertyTestArray[0]).isEqualTo("a");
assertThat(propertyTestList.get(0)).isEqualTo("a");
}
}
,
을 기준으로 쪼갬(a,b,c가 각각 List에 들어간다)Spring boot interceptor에서 @Value
로 프로퍼티 값을 가져와 유효한 접근인지 확인을 하려고 하였는데 값이 null
로 되어 찾아보니 Interceptor를 Spring been 으로 등록해주면 해당 현상을 해결 할수 있다고 하여, Interceptor를 Been으로 등록하여 문제를 해결.
@Slf4j
public class Interceptor implements HandlerInterceptor {
@Value("${API_AUTHORIZATION}")
private String testAuthorization;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String authorization = request.getHeader("Authorization");
if (authorization == null) {
log.info("Authorization is null");
return false;
}
if (! testAuthorization.equals(authorization)) {
log.info("Authorization fail = {}", authorization);
return false;
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public Interceptor interceptor(){
return new Interceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor())
.addPathPatterns(“/**”);
}
}