SigConfig
Custom config
SigYaml을 사용하는 설정 클래스입니다. Foundation YamlConfig의 대체를 목적으로 합니다.
Reason
Foundation config은
SimplePlugin과 강결합 되어 있어 유닛 테스트를 어렵게 합니다.toJson()메서드에 하위 키를 전부 포함하는 key를 출력 하는 버그가 존재합니다.toJson()메서드는" {name}"와 같은 값을 정상적으로 처리하지 않습니다.
Usage
SigConfig을 extends 합니다.init()메서드에 초기화 로직을 작성합니다.필요할 때 인스턴스를 만들고
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
update가true로 설정되어 있을 시 리소스 파일의 모든 key를 override 합니다. 이는 정상 동작이나, Foundation config에서는 이를 시행하지 않은 경우도 존재하는 것으로 보입니다. 따라서 사용 전 프로젝트 폴더 resource 파일에 어떤 값이 있는지 확인해볼 필요가 있습니다.YamlConfig은
init()을 사용하지만 SigConfig은load()를 사용합니다. 일반적인 상황에서는SigConfig#init을 호출해서는 안됩니다.save()기능은 비정상적 종료와 같은 상황을 상정하지 않았습니다. DB 저장에 비해 근본적으로 불안정 하므로 중요하거나 수정이 빈번한 데이터를 SigConfig 으로 저장하려고 하지 않는 것이 좋습니다.
Last updated