当前位置: 首页 > 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.pierceye.com/news/324935/

相关文章:

  • 淘宝网站怎么做视频58做二手车网站应该怎么推广
  • 自动翻译网站软件cf刷枪网站怎么做的
  • 示范校建设验收网站网站对话窗口怎么做
  • phpcms 移动网站模板怎么做个人网页
  • 南宁手机建站公司新加坡网站后缀
  • 如何在建设部网站查询获奖情况如何申请电商网站
  • jsp网站访问万维网网站幻灯
  • 南通住房和城乡建设部网站首页安徽公司网站建设
  • 建筑论坛网站修改WordPress文章发布页面
  • 网站代备案系统seo优化服务是什么意思
  • 专门做选择题的网站一个网站seo做哪些工作
  • wordpress 多站点 拷贝中国建设银行春招网站
  • 门户营销型网站wordpress代码执行
  • 保山市建设厅网站做建筑机械网站那个网站好
  • 广告位网站建设国际人才网中山招聘网
  • 南昌市城市建设档案馆网站一个网站做无限关键词
  • wordpress特别卡 iis东莞推广优化公司
  • 做网站收入怎样开放平台登录
  • 外贸网站运营推广微信运营商
  • 国外做储物柜的网站做亚马逊网站一般发什么快递
  • 仿古建筑公司网站廊坊网站建设公司
  • 在线动画手机网站模板下载学软件开发需要什么基础
  • 北京的网站建设收费标准推广产品的方法和步骤
  • 北京市专业网站制作企业合肥做网络推广的公司
  • 网站建设php教程视频手机商城网站设计
  • 重庆网站建设公司哪个最好老家装设计网
  • 外贸网站建设产品crm公司
  • 网站做查赚钱网站建设捌金手指花总四
  • 有没有做链接的网站彩票型网站建设
  • 15年做哪个网站能致富网站界面设计的相关指南