YML 예시 [1] 단일 조건
이전에 작성한 easy rules 사용 [5] YML 게시물의 예시를 작성해보겠다. YML 방식을 사용할 경우, controller class 파일에 대한 수정이 크게 없다는 장점이 존재한다. 메인이 되는 class 파일 및 yml 파일을 다음과 같이 수정하도록 하겠다.
// (구) 메인이 되는 class 파일 내 소스코드
// facts 정의
Facts facts = new Facts();
facts.put("rain", true);
↓
// (신) 메인이 되는 class 파일 내 소스코드
// facts 정의
Facts facts = new Facts();
facts.put("position", true);
// (구) rule yml 파일 소스 코드
name: "weather rule"
description: "if it rains then take an umbrella"
condition: "rain == true"
actions:
- "System.out.println(\"It rains, take an umbrella!\");"
↓
// (신) rule yml 파일 소스 코드
name: "position rule"
description: "position check rule"
priority: 1
condition: "position == true"
actions:
- "System.out.println(\"직급이 일치합니다. 문서 결재에 대한 승인 권한이 부여됩니다.\");"
이제 해당 project를 구동하면, 다음과 같은 console 화면을 확인할 수 있다.
yml 파일에 설정한 condition(조건) 및 actions(결과 행동)이 정상적으로 실행되고 있음을 알 수 있다.
YML 예시 [2] 다중 조건
메인이 되는 class 파일 및 yml 파일을 다음과 같이 수정하도록 하겠다. yml 파일명을 rule.yml에서 rule1.yml로 수정하는 것도 잊지말자.
// (구) 메인이 되는 class 파일 내 소스코드
// Local path
String path = "C:\\test\\workspace\\ruleTest\\src\\main\\resources\\rule\\rule.yml";
// facts 정의
Facts facts = new Facts();
facts.put("rain", true);
// rules 정의
MVELRuleFactory ruleFactory = new MVELRuleFactory(new YamlRuleDefinitionReader());
Rule testRule = ruleFactory.createRule(new FileReader(pathRe));
Rules rules = new Rules();
rules.register(testRule);
↓
// (신) 메인이 되는 class 파일 내 소스코드
// Local path
String path_1 = "C:\\test\\workspace\\ruleTest\\src\\main\\resources\\rule\\rule1.yml";
String path_2 = "C:\\test\\workspace\\ruleTest\\src\\main\\resources\\rule\\rule2.yml";
// facts 정의
Facts facts = new Facts();
facts.put("position", true);
facts.put("authLevel", 4);
// rules 정의
MVELRuleFactory ruleFactory = new MVELRuleFactory(new YamlRuleDefinitionReader());
Rule rule_1 = ruleFactory.createRule(new FileReader(path_1));
Rule rule_2 = ruleFactory.createRule(new FileReader(path_2));
Rules rules = new Rules();
rules.register(rule_1);
rules.register(rule_2);
// (구) rule yml 파일 소스 코드
name: "weather rule"
description: "if it rains then take an umbrella"
condition: "rain == true"
actions:
- "System.out.println(\"It rains, take an umbrella!\");"
↓
// (신) rule yml 파일 소스 코드
# rule 1
name: "rule_1"
description: "position check rule step 1"
priority: 1
condition: "position == true"
actions:
- "System.out.println(\"직급이 일치합니다. 문서 결재에 대한 승인 권한이 부여됩니다.\");"
필자가 직접 확인한 바로는 YML 방식에서도 간단하게 다중 규칙(multiple rules)을 선언하여 제어할 수 있다. 예시와 같이 rule을 선언한 후, priority(순위)를 매겨주면 된다. 현재 매겨진 priority가 1이므로, 2도 필요할 것이다. 새로운 yml 파일을 생성하여 규칙을 선언해 주도록 한다.
# rule 2
name: "rule_2"
description: "position check rule step 2"
priority: 2
condition: "authLevel > 3"
actions:
- "System.out.println(\"승인 권한 레벨 확인완료. 문서 결재에 대한 승인 권한이 부여됩니다.\");"
이제 해당 project를 구동하면, 다음과 같은 console 화면을 확인할 수 있다.
yml 파일들에 설정한 condition(조건) 및 actions(결과 행동)이 priority(순위)에 따라 정상적으로 실행되고 있음을 알 수 있다.
[ 출처 ]
Easy Rules 사용법 : https://github.com/j-easy/easy-rule
'Java > easy rules' 카테고리의 다른 글
easy rules 사용 [8] jeasy API(Controller 추가 있음) 예시 (0) | 2021.08.23 |
---|---|
easy rules 사용 [7] MVEL Rule 예시 (0) | 2021.08.23 |
easy rules 사용 [5] YML (0) | 2021.08.19 |
easy rules 사용 [4] jeasy API(Controller 추가 없음) (0) | 2021.08.19 |
easy rules 사용 [3] MVEL Rule (0) | 2021.08.19 |