当前位置: 首页 > news >正文

商城类网站建设方案东凤镇做网站公司

商城类网站建设方案,东凤镇做网站公司,西安天气最新公布,网页小游戏免费秒玩当某个服务的需求经常变的时候#xff0c;如果使用了硬编码的方式进行开发会是一件非常麻烦的事。 最近在对项目的积分模块进行改造的时候想到了规则引擎#xff0c;使用规则引擎处理复杂而且多变的业务逻辑有其非常大的优势#xff0c;包括实时更新、性能等方面。 不多说如果使用了硬编码的方式进行开发会是一件非常麻烦的事。   最近在对项目的积分模块进行改造的时候想到了规则引擎使用规则引擎处理复杂而且多变的业务逻辑有其非常大的优势包括实时更新、性能等方面。 不多说直接上代码 1、第一步先写好工具类有了工具类只需在应用的业务场景中调用相应方法就可以了 Component public class KieSessionUtils {private static KieBase kieBase;//定义规则文件的包名与drl文件里的package对应private static final String drlPackage rules;//定义drl文件的存放路径静态变量需要通过在其set方法上打Value注解才可实现配置注入private static String drlPath;//通过配置拉取路径这里推荐一下apollo配置中心使用apollo可以实时更改通过Value拉取的配置Value(${drools.points.drlPath})public void setDrlPath(String drlPath){KieSessionUtils.drlPath drlPath;}/*** 生成kieSeesion会话* param ruleName* return* throws Exception*/public static KieSession newKieSession(String ruleName) throws Exception {//无状态的kieSession和有状态相比区别在于不维持会话即使用完后自动释放资源不需要手动调dispose//StatelessKieSession kieSession getKieBase(ruleName).newStatelessKieSession();//有状态的kieSessionKieSession kieSession getKieBase(ruleName).newKieSession();//添加监听器这里加的是对规则文件运行debug监听器测试时最好加上用于排查问题生产上可视情况去掉kieSession.addEventListener(new DebugRuleRuntimeEventListener());return kieSession;}/*** 生成kieBase* param ruleName 规则文件名* return* throws Exception*/protected static KieBase getKieBase(String ruleName) throws Exception {//判断kieBase和需要获取的规则文件是否存在不存在则重新初始化kieBaseif (kieBase null || kieBase.getRule(drlPackage,ruleName)null) {KieServices kieServices KieServices.Factory.get();KieFileSystem kfs kieServices.newKieFileSystem();//获取规则数据源这里由于本人项目使用的是springboot打包会打成jar包如果想做实时更新drl文件需要放在jar包外面//获取resource的方式很多不一定要用读取文件的方式可根据自己的设计和业务场景采取不同方案Resource resource kieServices.getResources().newFileSystemResource(new File(drlPath/ruleName));resource.setResourceType(ResourceType.DRL);kfs.write(resource);KieBuilder kieBuilder kieServices.newKieBuilder(kfs).buildAll();if (kieBuilder.getResults().getMessages(Message.Level.ERROR).size() 0) {throw new Exception();}KieContainer kieContainer kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());kieBase kieContainer.getKieBase();}return kieBase;}/*** 更新规则* param ruleName 规则名和规则文件名* throws Exception*/public static void refreshRules(String ruleName) throws Exception {//判断规则不为null则移除规则if (kieBase !null kieBase.getRule(drlPackage,ruleName)!null){//为了方便本人把规则名和drl文件名称统一定义了kieBase.removeRule(drlPackage,ruleName);//重新初始化kieBasegetKieBase(ruleName);}} } 2、编写规则文件这里只给出和规则引擎格式有关的代码 package rules; //包名import com.jiuair.dto.AddObject import java.util.List import java.util.HashMap import java.util.Map import java.util.ArrayList import java.util.Date import java.util.Iterator import java.util.Setglobal com.demo.dto.AddObject addObject //传入的对象同时也是返回值对象 rule add.drl //规则名为了方便设为何drl文件名一样可以不一样when$s : AddObject();then。。。。。//这一段加自己业务代码逻辑支持jdk$s.setResult(X); //执行完逻辑后将结果设置到对象中 end 3、在业务场景中调用工具类里的方法 private AddObject executeAddRule(Object data) {AddObject addObject new AddObject();addObject.setJsonObject(data);try {//获取会话KieSession kieSession KieSessionUtils.newKieSession(add.drl);//设置传入参数kieSession.insert(addObject);//设置全局参数kieSession.setGlobal(addObject,addObject);//执行规则kieSession.fireAllRules();//释放会话资源kieSession.dispose();} catch (Exception e) {e.printStackTrace();}return addObject;} 4、实现实时更新drl文件    /*** 更新规则文件这里只给出service层的代码了相信controller大家都会写。。。* param name 名称为drl的文件名* param is 由于dubbo不支持流的方式传输文件需在controller转为byte数组再传到service*/Overridepublic void refreshRule(String name, byte[] is) {try {FileOutputStream fos new FileOutputStream(drlPath/name);fos.write(is);fos.close();KieSessionUtils.refreshRules(name);} catch (Exception e) {e.printStackTrace();}} 附maven引包 propertiesruntime.version7.20.0.Final/runtime.version/propertiesdependencygroupIdorg.kie/groupIdartifactIdkie-api/artifactIdversion${runtime.version}/version/dependencydependencygroupIdorg.kie/groupIdartifactIdkie-internal/artifactIdversion${runtime.version}/version/dependencydependencygroupIdorg.drools/groupIdartifactIddrools-core/artifactIdversion${runtime.version}/version/dependency dependencygroupIdorg.drools/groupIdartifactIddrools-decisiontables/artifactIdversion${runtime.version}/version/dependency     import java 详细X 没有英汉互译结果  请尝试网页搜索 转载于:https://www.cnblogs.com/jagerLan/p/10857004.html
http://www.zqtcl.cn/news/168383/

相关文章:

  • 新网站制作市场泰安做网站哪家好
  • 常熟苏州网站建设flash如何制作网站
  • 电商网站都是用什么做的网站服务器维护方案
  • 简述企业网站建设的流程手机怎么自己做网页
  • 网站备案信息管理呼图壁网站建设
  • 网站建设学习资料开发一套软件需要多少钱
  • 大庆网站设计衡阳seo网站推广
  • 基层科普网站建设的现状自己做的网站怎样链接数据库
  • 网站建设工程师的职位要求化妆品行业网站开发
  • 做海报有什么素材网站知乎什么样的蓝色做网站做好看
  • 餐饮网站建设网站wordpress优酷视频插件下载
  • 什么网站做广告效果好wordpress中文cms
  • seo与网站优化广州洲聚网站开发
  • 建一个自己用的网站要多少钱北京网站建设价格天
  • 免费做婚礼邀请函的网站如何设定旅游网站seo核心关键词
  • 网上做问卷调查赚钱哪些网站好全flash网站制作
  • 个人网站备案核验单填写wordpress登录安全插件下载
  • 拖拽做网站cms系统设计
  • 村建站什么部门网站建设步骤图
  • 移动端网站建设的意义中工信融网站建设
  • 网站设计宽屏尺寸盐城网站建设渠道合作
  • 网站所有者查询hexo做网站
  • 杭州专业网站设计策划大数据网站建设和
  • 建一个自己的网站需要多少钱泰州网站快速排名优化
  • 企业网站的建设企业湖南网络推广
  • 山西省建设厅投诉网站郴州新网交友手机版
  • 营销网站建设是什么flash个人网站欣赏
  • 网站建设最简单的教程视频教程建设厅注册中心网站首页
  • 免费做网站凡科wordpress 分享到微信 插件
  • 购物网站项目建设内容有啥网站是专做时尚穿搭