스프링 @Value 어노테이션에 기본값 설정

스프링 프레임워크 @Value 어노테이션에 지정할 수 있는 기본값은 무엇이 있으며 어떻게 설정할 수 있을까?


기본형 타입(Primitive Type)

int, boolean 타입 등의 값이 기본값으로 선언될 수 있다.

@Value("${taeng.test:1}")
private int value;

@Value("${taeng.test:true}")
private boolean value;

주의할 점은 타입 캐스팅이 안되는 경우다. 예를 들어서 아래와 같은 코드를 사용하면 다음과 같은 예외가 발생하며 애플리케이션이 구동되지 않는다. TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "true"

@Value("${taeng.test:true}")
private int value;


문자열(String)

taeng.test 속성에 해당되는 값이 없는 경우 “defaultMsg” 라는 문자열이 기본값으로 지정된다.

@Value("${taeng.test:defaultMsg}")
private String msg;

아래처럼 공백 값을 기본값으로도 지정할 수 있다.

@Value("${taeng.test:}")
private String msg;

참고로 :가 없이 사용되는 경우 해당 속성이 반드시 선언돼야 한다. 그렇지 않으면 예외가 발생한다. (Could not resolve placeholder 'taeng.test' in value "${taeng.test}")


배열(Array)

배열에도 기본값을 지정할 수 있다. 콤마(,)로 구분하면 된다.

@Value("${taeng.test:1,2,3}")
private int[] values;

@Value("${taeng.test:a,b,c}")
private String[] values;


SpEL(Spring Expression Language)

스프링 표현 언어(Spring Expression Language, SpEL)에도 기본값을 지정할 수 있다. java.home 이라는 시스템 설정 값이 없는 경우 문자열 “hello”가 기본값으로 지정된다.

@Value("#{systemProperties['java.home'] ?: 'hello'}")
private String values;

댓글을 남기시려면 Github 로그인을 해주세요 :D


Hi, there!

Thanks for visiting my blog.
Please let me know if there are any mistakes in my post.