最近在做urle的規則引擎的整合,記錄一下遇到的坑
客戶端:
RuleConfig:
@Configuration
@ImportResource({"classpath:urule-core-context.xml"})
public class RuleConfig {
@Bean
public PropertySourcesPlaceholderConfigurer propertySourceLoader() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
configurer.setIgnoreUnresolvablePlaceholders(true);
configurer.setOrder(1);
return configurer;
}
}
RuleController:
@RestController
public class RuleController {
@RequestMapping("rule")
public String rule(@RequestParam String data) throws IOException {
//創建一個KnowledgeSession對象
KnowledgeService knowledgeService = (KnowledgeService) Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);
KnowledgePackage knowledgePackage = knowledgeService.getKnowledge("aaa/bag");
KnowledgeSession session = KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);
Integer integer = Integer.valueOf(data);
Map<String, Object> param = new HashMap();
param.put("var", integer);
session.fireRules(param);
Integer result = (Integer) session.getParameter("var");
return String.valueOf(result);
}
}
yml:
urule:
resporityServerUrl: http://localhost:9502
#0 -> 每次都從服務端拉取
#1 -> 緩存在本地
knowledgeUpdateCycle: 1
pom:
<dependency>
<groupId>com.bstek.urule</groupId>
<artifactId>urule-console</artifactId>
<version>2.1.7</version>
</dependency>
注:客戶端一般沒什么問題,但是我在配置的時候遇到jar包沖突的問題,是日志的jar包沖突,解決一下就好了
服務端:
dataSourceConfig:
@Configuration
@ImportResource({"classpath:urule-console-context.xml"})
@PropertySource(value = {"classpath:urule-console-context.properties"})
public class dataSourceConfig {
@Bean
public PropertySourcesPlaceholderConfigurer propertySourceLoader() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
configurer.setIgnoreUnresolvablePlaceholders(true);
configurer.setOrder(1);
return configurer;
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource datasource() {
return DataSourceBuilder.create().build();
}
}
URuleServletRegistration:
@Component
public class URuleServletRegistration {
@Bean
public ServletRegistrationBean<HttpServlet> registerURuleServlet() {
return new ServletRegistrationBean<>(new URuleServlet(), "/urule/*");
}
}
yml:
urule:
repository:
# dir: d://測試
databasetype: mysql
datasourcename: datasource
這里要注意:spring的datasource屬性的url要改成jdbc-url,不然會報錯,感覺是因為datasource屬性被引用后項目把他當作一個數據源了。
pom:
<dependency>
<groupId>com.bstek.urule</groupId>
<artifactId>urule-console</artifactId>
<version>2.1.7</version>
<exclusions>
<exclusion>
<artifactId>slf4j-jdk14</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
導入dbcp的jar包是因為配置類中需要dbcp的配置,導入io包的原因是在項目啟動后,添加變量庫保存文件時會報一個NoClassDefFoundError的錯誤,視情況而定