본문 바로가기
개발

@Value어노테이션을 static변수로 선언하기

by 홍냥냥냥냥 2023. 3. 7.
728x90
728x90

진행하는 프로젝트 중 로컬, 개발, QA, 운영 환경에 따라 설정 값을 달리 세팅해야하는 경우가 있다.

 

그럴 때는 @Value 어노테이션을 이용하여 설정 파일에 선언된 값을 읽어올 수 있다.

 

@Value annotation 이란?
👉 설정파일(.properties / .yml)에서 설정한 내용을 주입시켜주는 어노테이션.

 

나는 static 함수 내에서 운영환경인 경우에만 운영 경로를 보고

그 외 환경인 경우에는 다른 경로를 보도록 코딩을 하고 싶었다.

 

첫번째로 든 생각은 static함수에서 사용할거니까 static 변수를 선언해서 @Value 어노테이션 쓰면 되는 거 아냐? 였다.

 

해보자.

@Value("${server.profile}")
private static String profile;

public static void loadPath() {
  String filePath = ServletUtil.getRealPath();
  
  if("real".equals(profile)) {
	filePath += "WEB-INF/classes/test/test.txt";
  } else {
	filePath += "WEB-INF/classes/test/test.txt";        
  }
}

 

 

세상에 계속 else만 탄다.

null이다. null이야... null 어쩌면 좋니..

 

구글링 시작.

 

static 변수에는 @Value 어노테이션이 동작하지 않는다고 한다.

 

그럼 어떻게 하는데... ?

private static String profile;
  
@Value("${server.profile}")
private void setProfile(String value) {
profile = value;
}

public static void loadPath() {
  String filePath = ServletUtil.getRealPath();
  
  if("real".equals(profile)) {
	filePath += "WEB-INF/classes/test/test.txt";
  } else {
	filePath += "WEB-INF/classes/test/test.txt";        
  }
}

이렇게.

 

static 변수는 일단 선언해두고,

getter, setter 쓰듯이 setter 메소드를 추가해서 우리가 선언한 static 변수에 직접 값이 들어가도록 하면 된다.

 

고민해결!

 

728x90
300x250

댓글