SpringBoot 整合Drools 支持多套规则

1.第一步设置DROOLS加载路径

public enum DroolsEnum {
	
	DROOLS_ENUM2_0("drools1_1","rules/drools1_1/"),
	DROOLS_ENUM1_1("drools2_0","rules/drools2_0/"),
	DROOLS_ENUM_OLD("drools_old","rules/drools_old/");


	public static final String DROOLS1_1 = "drools1_1";

	public static final String DROOLS2_0 = "drools2_0";

	public static final String DROOLS_OLD = "drools_old";

	private String name; //drools鍚嶇О
	private String rulesPath;//drools璺緞

	DroolsEnum(String name,String rulesPath ){
		this.name=name;
		this.rulesPath=rulesPath;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getRulesPath() {
		return rulesPath;
	}

	public void setRulesPath(String rulesPath) {
		this.rulesPath = rulesPath;
	}

}

 

2.第二步加载DROOLS

package com.shangyong.configure;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieModule;
import org.kie.api.builder.KieRepository;
import org.kie.api.builder.ReleaseId;
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 com.shangyong.enums.drools.DroolsEnum;

@Configuration
public class DroolsAutoConfiguration {

    @Bean
    public Map<String,KieSession> getMapKieSession() throws IOException{
    	Map<String,KieSession> kieSessionMap=new HashMap<String,KieSession>();
    	for(DroolsEnum path : DroolsEnum.values()){
			KieServices kieServices = KieServices.Factory.get();
			KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
			ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
			Resource[] resource=resourcePatternResolver.getResources("classpath*:" +path.getRulesPath()+ "**/*.*");
			  for (Resource file : resource) {
				  kieFileSystem.write(ResourceFactory.newClassPathResource(path.getRulesPath() + file.getFilename(), "UTF-8"));
			  }
			  final KieRepository kieRepository = kieServices.getRepository();
			  kieRepository.addKieModule(new KieModule() {
				  public ReleaseId getReleaseId() {
					  return kieRepository.getDefaultReleaseId();
				  }
			  });
			  KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
			  kieBuilder.buildAll();
			  KieContainer kieContainer=kieServices.newKieContainer(kieRepository.getDefaultReleaseId());
			  KieSession kieSession = kieContainer.newKieSession();
			  kieSessionMap.put(path.getName(), kieSession);
			}
		return kieSessionMap;
    }
    
}

3.设置DROOLS工具类

package com.shangyong.util;

import java.math.BigDecimal;

import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

import com.shangyong.entity.drools.OldUserRuleEngine;;

public class DroolsUtil {
    public synchronized  static  void executeRule(KieSession kieSession,OldUserRuleEngine oldUserRuleEngine) {
        if (oldUserRuleEngine != null) {
        		oldUserRuleEngine.setScore(BigDecimal.valueOf(0));
                kieSession.insert(oldUserRuleEngine);
                int count = kieSession.fireAllRules();
        }
    }
}

4.注入和使用Drools

 @Autowired
    Map<String, KieSession> kieSessionMap;


DroolsUtil.executeRule(kieSessionMap.get(DroolsEnum.DROOLS_OLD),oldUserRuleEngine);

如有疑问请加我qq:826544809

支付宝扫一扫天天领红包

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值