SigConfig

Custom config

SigYaml을 사용하는 설정 클래스입니다. Foundation YamlConfig의 대체를 목적으로 합니다.

SigYaml이 SigParser를 사용하므로 SigConfig도 값 변환에 SigParser를 사용합니다.

Reason

  • Foundation config은 SimplePlugin과 강결합 되어 있어 유닛 테스트를 어렵게 합니다.

  • toJson() 메서드에 하위 키를 전부 포함하는 key를 출력 하는 버그가 존재합니다.

  • toJson() 메서드는 " {name}" 와 같은 값을 정상적으로 처리하지 않습니다.

Usage

  1. SigConfig을 extends 합니다.

  2. init() 메서드에 초기화 로직을 작성합니다.

  3. 필요할 때 인스턴스를 만들고 load()를 호출합니다. (이는 reload와 동일합니다.)

@Getter
public class TestConfig extends SigConfig {

    private String testString;
    private final Map<Integer, Integer> testMap = new HashMap<>();

    protected TestConfig() {
        super("test_config.yml", SimplePlugin.getInstance());
    }

    @Override
    public void init() {
        testString = getString("test_string");
        
        YamlNode testMap = getMap("test_map");
        for (String key : test.keySet()) {
            testMap.put(Integer.parseInt(key), testMap.getInteger(key, 0);
        }
    }

}

Feature

  • init(): 초기화 메서드입니다. 각 인스턴스 마다 재정의 되며 load() 완료 시 호출됩니다.

  • load(): 설정을 configFile 에서 리로드 합니다.

  • update(): originFile의 값을 override 합니다.

  • setUpdate(): update()를 수행할지 여부를 결정합니다. 생성자 에서 호출되어야 합니다. 기본값은 false 입니다.

  • save(): 현재 값을 configFile에 저장합니다. 기존 파일은 %s-origin.yml로 옮겨집니다.

  • save(true): 위와 같으나, 기존 파일을 옮기지 않고 덮어씁니다.

  • put(String, Object): 새 객체를 컨픽의 메인 YamlNode에 넣습니다. 저장 시 반영됩니다.

  • configFile 파일이 없을 시 create()를 호출해 originFile에서 새 파일을 만듭니다.

SigConfigController

SigConfig update시 로깅 기능을 끄는 slientUpdate flag가 있습니다. 개발 환경에서 업데이트 된 값을 일일히 반영할 필요가 없을 때 로그 도배를 방지합니다.

해당 값은 SigLib의 debug.yml에 존재합니다.

SigConfig Edit

SigConfig을 통해 yml 설정 파일을 수정하는 예시는 다음과 같습니다.

Caution

  • updatetrue로 설정되어 있을 시 리소스 파일의 모든 key를 override 합니다. 이는 정상 동작이나, Foundation config에서는 이를 시행하지 않은 경우도 존재하는 것으로 보입니다. 따라서 사용 전 프로젝트 폴더 resource 파일에 어떤 값이 있는지 확인해볼 필요가 있습니다.

  • YamlConfig은 init()을 사용하지만 SigConfigload()를 사용합니다. 일반적인 상황에서는 SigConfig#init 을 호출해서는 안됩니다.

  • save() 기능은 비정상적 종료와 같은 상황을 상정하지 않았습니다. DB 저장에 비해 근본적으로 불안정 하므로 중요하거나 수정이 빈번한 데이터를 SigConfig 으로 저장하려고 하지 않는 것이 좋습니다.

Last updated