본문 바로가기

Java

Spring Boot application.properties 값 가져오기

반응형
  • 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

 

OKKY - java static 변수에 @Value 사용시 null인 이유

안녕하세요.spring boot에서 application.properties에 있는 값을 @Value 어노테이션을 사용해서 static 변수에 주입받을 수 있도록 했는데, null이 발생했습니다.검색을 통해 static 변수에서는 @Value를 사용해

okky.kr

 

  • Junit으로 테스트를 시도해봤지만, 값을 가져올 수 없었습니다.(null)
  • Component, Service 등의 annotation을 사용해봤지만 값은 항상 null이었습니다.
  • 여러 이유를 추측해볼 수 있지만 명확한 이유를 알 수가 없네요.
  • 이유를 찾게 된다면 포스팅을 수정하도록 하겠습니다.
반응형