반응형
- application.properties 에 있는 값을 가져오는 테스트를 진행해보겠습니다.
- 테스트해볼 값을 입력해줍니다.
- application.properties
test.value=TESTVALUE
test.value.int=123456789
- TestController.java
@Slf4j
@RestController
public class TestController {
@Value("${test.value}")
private String testValue;
@Value("${test.value}")
private static String testValue2;
@Value("${test.value.int}")
private int testValueInt;
@Value("${test.value.int}")
private String testValueInt2;
@GetMapping(path = "/test")
public void test() {
log.info(testValue);
log.info(testValue2);
log.info(Integer.toString(testValueInt));
log.info(testValueInt2);
}
}
- 호출 결과
- static으로 선언된 testValue2 를 제외한 나머지는 값을 가져온 것을 볼 수 있습니다.
- Value() annotation 을 사용하려면 static이면 값을 가져올 수 없습니다.
- properties에는 숫자로 기입을 했지만 properties의 기본 형태는 string입니다.
- 숫자 형태일 경우 Int 타입으로 치환해 가져오는 것을 볼 수 있습니다.
- Value annotation은 spring에서 관여하는 Component, Service로 class가 등록이 되어있어야 합니다.
- static 으로 값을 받고싶다면, entity java 파일을 통해 getter, setter를 정의해주고, 호출하는 곳에서 @Autowired를 통해 값을 불러와야 합니다.
- static은 ApplicationContext 초기화 이전에 메모리에 올라가기 때문에 ApplicationContext 초기화 단계 중 거의 마지막 부분에 위치하는 static은 사용할 수 없습니다.(OKKY 글 참고)
https://okky.kr/articles/684274
- Junit으로 테스트를 시도해봤지만, 값을 가져올 수 없었습니다.(null)
- Component, Service 등의 annotation을 사용해봤지만 값은 항상 null이었습니다.
- 여러 이유를 추측해볼 수 있지만 명확한 이유를 알 수가 없네요.
- 이유를 찾게 된다면 포스팅을 수정하도록 하겠습니다.
반응형