[SpringBoot] *.properties 내 값 enum 클래스로 받아 관리하기

웹/Java|2024. 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(으)로 완료된 프로세스

 

댓글()