Dengan mengkonfigurasi peraturan perniagaan dalam fail konfigurasi, kod boleh diperkemas dan dikekalkan Apabila peraturan diubah suai, hanya fail konfigurasi yang perlu diubah suai. peraturan mudah ialah enjin peraturan padat yang menyokong ekspresi SPEL musim bunga, serta ekspresi Apache JEXL dan ekspresi MVL.
Tambah kebergantungan dalam gradle projek.
build.gradle:
3. Fail konfigurasiProgram contoh meletakkan peraturan perniagaan ke dalam fail konfigurasi, kod fail konfigurasi peraturan perniagaan (demo-rule.yml):pemalam {
id 'org.springframework.boot' versi '3.0.5'
id 'io.spring.dependency-management ' version '1.1.0'
id 'java'
}group = 'cn.springcamp'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17 'konfigurasi {
🎜>
compileOnly {
} extendsFrom annotationProcessor
}
testCompileOnly {
extendsFrom testAnnotationProcessor
}
🎜>mavenCentral()
pergantungan {
}pelaksanaan "org.springframework.boot:spring-boot-starter-json"
dependencyManagement {
pelaksanaan 'org.springframework.boot:spring- boot -starter-validation'
pelaksanaan 'org.jeasy:easy-rules-core:4.1.0'
pelaksanaan 'org.jeasy:easy-rules-spel:4.1.0'
pelaksanaan 'org . jeasy:easy-rules-support:4.1.0'
annotationProcessor 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
testImplementation "org.springframework.boot:spring-boot- starter -test"
testImplementation 'org.junit.vintage:junit-vintage-engine'
testImplementation 'org.junit.vintage:junit-vintage-engine'
}mengimport {
ujian {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:2022.0.1"
}
}useJUnitPlatform()
}
nama: "peraturan umur"Peraturan dalam fail konfigurasi dikonfigurasikan melalui syarat , apabila peraturan dipenuhi, tindakan yang dikonfigurasikan dalam tindakan akan dipanggil. Projek sampel menggunakan ungkapan SPEL untuk konfigurasi peraturan Dua peraturan dikonfigurasikan dalam fail konfigurasi Peraturan pertama menentukan sama ada peraturan itu dipenuhi melalui getAdult() dalam kaedahhuraian: ""
keutamaan: 1
syarat: "#person.getAdult() == false"
tindakan:
- "T( java.lang.System).out.println("Kedai: Maaf, anda tidak dibenarkan membeli alkohol")"
- "#person.setAdult(true)"
- "#person. setAge(18 )"
---
nama: "peraturan alkohol"
huraian: ""
keutamaan: 1
keadaan: "#person.getAdult() == benar"
tindakan :
- "T(java.lang.System).out.println("Kedai: anda kini dibenarkan membeli alkohol")"
spring bean dipanggil apabila peraturan digunakan. person
peraturan:4. Konfigurasikan enjin peraturan dalam kodKonfigurasikan enjin peraturan melalui kelas konfigurasi springskip-on-first-failed-rule: true
skip-on-first-applied-rule: false
skip-on-first-non-triggered-rule: true
rules:
- rule-id: "demo"
rule- lokasi fail: "classpath:demo-rule.yml"
: Spring bean RuleEngineConfig
dikonfigurasikan dalam fail konfigurasi
@Slf4j @EnableConfigurationProperties(RuleEngineConfigProperties.class) @Configuration public class RuleEngineConfig implements BeanFactoryAware { @Autowired(required = false) private List<RuleListener> ruleListeners; @Autowired(required = false) private List<RulesEngineListener> rulesEngineListeners; private BeanFactory beanFactory; @Bean public RulesEngineParameters rulesEngineParameters(RuleEngineConfigProperties properties) { RulesEngineParameters parameters = new RulesEngineParameters(); parameters.setSkipOnFirstAppliedRule(properties.isSkipOnFirstAppliedRule()); parameters.setSkipOnFirstFailedRule(properties.isSkipOnFirstFailedRule()); parameters.setSkipOnFirstNonTriggeredRule(properties.isSkipOnFirstNonTriggeredRule()); return parameters; } @Bean public RulesEngine rulesEngine(RulesEngineParameters rulesEngineParameters) { DefaultRulesEngine rulesEngine = new DefaultRulesEngine(rulesEngineParameters); if (!CollectionUtils.isEmpty(ruleListeners)) { rulesEngine.registerRuleListeners(ruleListeners); } if (!CollectionUtils.isEmpty(rulesEngineListeners)) { rulesEngine.registerRulesEngineListeners(rulesEngineListeners); } return rulesEngine; } @Bean public BeanResolver beanResolver() { return new BeanFactoryResolver(beanFactory); } @Bean public RuleEngineTemplate ruleEngineTemplate(RuleEngineConfigProperties properties, RulesEngine rulesEngine) { RuleEngineTemplate ruleEngineTemplate = new RuleEngineTemplate(); ruleEngineTemplate.setBeanResolver(beanResolver()); ruleEngineTemplate.setProperties(properties); ruleEngineTemplate.setRulesEngine(rulesEngine); return ruleEngineTemplate; } @Bean public RuleListener defaultRuleListener() { return new RuleListener() { @Override public boolean beforeEvaluate(Rule rule, Facts facts) { return true; } @Override public void afterEvaluate(Rule rule, Facts facts, boolean b) { log.info("-----------------afterEvaluate-----------------"); log.info(rule.getName() + rule.getDescription() + facts.toString()); } @Override public void beforeExecute(Rule rule, Facts facts) { log.info("-----------------beforeExecute-----------------"); log.info(rule.getName() + rule.getDescription() + facts.toString()); } @Override public void onSuccess(Rule rule, Facts facts) { log.info("-----------------onSuccess-----------------"); log.info(rule.getName() + rule.getDescription() + facts.toString()); } @Override public void onFailure(Rule rule, Facts facts, Exception e) { log.info("-----------------onFailure-----------------"); log.info(rule.getName() + "----------" + rule.getDescription() + facts.toString() + e.toString()); } }; } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } }
dan mencetuskan pelaksanaan enjin peraturan melalui ruleEngineTemplate. ruleEngineTemplate
Selepas konfigurasi, kami boleh melaksanakan enjin peraturan dalam kod perniagaan untuk memproses peraturan perniagaan yang dikonfigurasikan dalam fail konfigurasi: ruleEngineTemplate
@SpringBootApplication public class Application implements CommandLineRunner { @Autowired RuleEngineTemplate ruleEngineTemplate; public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void run(String... args) { Person person = new Person(); Facts facts = new Facts(); facts.put("person", person); ruleEngineTemplate.fire("demo", facts); } }Selepas program dilaksanakan, anda. dapat melihat bahawa
dicetak dalam konsol Kandungan ini sepadan dengan Shop: Sorry, you are not allowed to buy alcohol
yang kami konfigurasikan dalam tindakan dalam fail peraturan, menunjukkan bahawa peraturan telah berjaya dilaksanakan. "T(java.lang.System).out.println("Shop: Sorry, you are not allowed to buy alcohol")"
Atas ialah kandungan terperinci Apakah proses untuk SpringBoot untuk menyepadukan enjin peraturan peraturan mudah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!