[SpringBoot] *.properties 내 값 enum 클래스로 받아 관리하기
웹/Java2024. 7. 26. 19:35
지금까지는 서버가 작동되는 환경에 대한 상수를 단순히 String으로만 관리해 왔다.
플랫폼 서버 개선을 진행하면서 properties로 해당 환경변수를 받고,
또 해당 상수를 서버 내부에 enum으로 관리하여 사용할 수 있는 값을 한정하도록 설정했다.
1. enum 클래스 생성
package kr.doodoo.common;
public enum ServerMode {
WINDOW("WINDOW"),
MAC("MAC"),
ETC("ETC");
private String mode;
ServerMode(String mode) {
this.mode = mode;
}
public String getMode() {
return this.mode;
}
public void setMode(String mode) {
this.mode = mode;
}
}
2. 지정한 config 정보가 들어갈 ConfigProperties 클래스를 만들고,
@ConfigurationProperties 어노테이션을 이용하여 *.properties 내의 값을 자동으로 주입한다.
해당 어노테이션에 대한 자세한 정보는 여기(망나니개발자님 블로그) 를 참고했다.
package kr.doodoo.common;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Log4j2
@Getter
@Setter
@ConfigurationProperties(prefix = "doodoo")
@Component
public class ConfigProperties {
private ServerMode serverMode;
// dataSource, rabbitMQ 등 이 클래스에서 관리하는 속성이 더 있지만 생략한다.
}
@ConfigurationProperties를 사용하고 싶다면,
@EnableConfigurationProperties 또는 @ConfigurationPropertiesScan를 사용해 자동 주입 대상을 지정해야 한다.
3. CofnigProperties 클래스의 어노테이션에 지정된 prefix로 클래스 내부에 주입될 값을 *.properties 또는 yml에 정의한다.
doodoo.server-mode=DOODOO
3-1. *.yml을 쓰고 있으며 하나의 키에 여러 가지 값을 넣고 싶은 경우, 이렇게 가능하다.
@ConfigurationProperties(prefix = "doodoo")
public class BaseConfig {
private List<String> serverHost;
}
doodoo:
server-host:
- local.doodoo.com
- dev.doodoo.com
- stg.doodoo.com
- doodoo.com
만약 enum에 지정되지 않은 값을 넣는다면 아래와 같이 경고 메시지가 뜨면서 서버가 정상적으로 실행되지 않는다!
아 스프링부트 편하다!
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to bind properties under 'doodoo.server-mode' to kr.doodoo.common.ServerMode:
Property: doodoo.server-mode
Value: "DOODOO"
Origin: URL [file:/Users/doodoo/config/doodoo-init.properties] - 41:15
Reason: failed to convert java.lang.String to kr.doodoo.common.ServerMode
(caused by java.lang.IllegalArgumentException: No enum constant kr.doodoo.common.ServerMode.DOODOO)
Action:
Update your application's configuration. The following values are valid:
ETC
MAC
WINDOW
타깃 VM에서 연결 해제되었습니다. 주소: 'xxx.xxx.xxx:xxxx', 전송: '소켓'
종료 코드 0(으)로 완료된 프로세스
'웹 > Java' 카테고리의 다른 글
@Conditional (0) | 2025.03.21 |
---|---|
[Gradle] --project-prop 옵션으로 특정 파일 제외하여 빌드하기 (2) | 2025.03.07 |
프로파일별로 다른 파일이 실행되도록 세팅하기 (0) | 2024.08.02 |
댓글()