SpringBoot整合Drools的实现步骤

网友投稿 273 2023-01-12

SpringBoot整合Drools的实现步骤

Drools有什么用

从我个人所待过的公司,其中做智能酒店这个项目时就用到规则引擎Drools,将它用于处理优惠劵规则。

SpringBoot整合Drools初步实战

1.导入Maven依赖

7.14.0.Final

org.drools

drools-compiler

${drools.version}

2.编写配置类

package com.springcloud.blog.admin.config;

import org.kie.api.KieBase;

import org.kie.api.KieServices;

import org.kie.api.builder.*;

import org.kie.api.runtime.KieContainer;

import org.kie.api.runtime.KieSession;

import org.kie.internal.io.ResourceFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.core.io.Resource;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import org.springframework.core.io.support.ResourcePatternResolver;

import java.io.IOException;

@Configuration

public class KiaSessionConfig {

private static final String RULES_PATH = "rules/";

@Bean

public KieFileSystem kieFileSystem() throws IOException {

KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();

for (Resource file : getRuleFiles()) {

kieFileSystem.write(ResourceFactory.newClassPathResource(RULES_PATH + file.getFilename(), "UTF-8"));

}

return kieFileSystem;

}

private Resource[] getRuleFiles() throws IOException {

ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();

final Resource[] resources = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "**/*.*");

return resources;

}

@Bean

public KieContainer kieContainer() throws IOException {

final KieRepository kieRepository = getKieServices().getRepository();

kieRepository.addKieModule(new KieModule() {

public ReleaseId getReleaseId() {

return kieRepository.getDefaultReleaseId();

}

});

KieBuilder kieBuilder = getKieServices().neZHUQQPywKieBuilder(kieFileSystem());

kieBuilder.buildAll();

return getKieServices().newKieContainer(kieRepository.getDefaultReleaseId());

}

private KieServices getKieServices() {

return KieServices.Factory.get();

}

@Bean

public KieBase kieBase() throws IOException {

return kieContainer().getKieBase();

}

@Bean

public KieSession kieSession() throws IOException {

return kieContainer().newKieSession();

}

}

3.resources目录新建rules目录

4.新建实体

package com.springcloud.blog.admin.drools;

public class People {

private int sex;

private String name;

private String drlType;

public int getSex() {

return sex;

}

public void setSex(int sex) {

this.sex = sex;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getDrlType() {

return drlType;

}

public void setDrlType(String drlType) {

this.drlType = drlType;

}

}

5.编写规则文件

package com.springcloud.blog.admin.drools

ihttp://mport com.springcloud.blog.admin.drools.People

dialect "java"

rule "man"

when

$p : People(sex == 1 && drlType == "people")

then

System.out.println($p.getName() + "是男孩");

end

6.单元测试(只要正常输出,表示整合是Ok的,接下来就可以任意应用了)

package com.springcloud.blog.base.controller.test.task;

import com.springcloud.blog.admin.BlogAdminApplication;

import com.springcloud.blog.admin.drools.People;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.kie.api.KieBase;

import org.kie.api.runtime.KieSession;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)

@SpringBootTest(classes = BlogAdminApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

public class DroolsJunitTest {

@Autowired

private KieSession session;

@Test

public void people() {

People people = new People();

people.setName("YC");

people.setSex(1);

people.setDrlType("people");

session.insert(people);//插入

session.fireAllRules();//执行规则

}

}

7.输出结果

YC是男孩

以上就是SpringBoot整合Drools的实现步骤的详细内容,更多关于SpringBoot整合Drools的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:德国代购快递物流查询单号(德国快递怎么查询)
下一篇:Java并发编程之浅谈ReentrantLock
相关文章

 发表评论

暂时没有评论,来抢沙发吧~