7.1 Spring简单整合Drools
a.第一步:创建maven工程drools_spring并配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
< project xmlns = " http://maven.apache.org/POM/4.0.0"
xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion> 4.0.0</ modelVersion>
< groupId> com.itheima</ groupId>
< artifactId> drools_spring</ artifactId>
< version> 1.0-SNAPSHOT</ version>
< properties>
< drools.version> 7.10.0.Final</ drools.version>
< spring.version> 5.0.5.RELEASE</ spring.version>
</ properties>
< dependencies>
< dependency>
< groupId> org.drools</ groupId>
< artifactId> drools-compiler</ artifactId>
< version> ${drools.version}</ version>
</ dependency>
< dependency>
< groupId> junit</ groupId>
< artifactId> junit</ artifactId>
< version> 4.12</ version>
</ dependency>
< dependency>
< groupId> org.kie</ groupId>
< artifactId> kie-spring</ artifactId>
< version> ${drools.version}</ version>
< exclusions>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-tx</ artifactId>
</ exclusion>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-beans</ artifactId>
</ exclusion>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-core</ artifactId>
</ exclusion>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-context</ artifactId>
</ exclusion>
</ exclusions>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-context</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-context-support</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-test</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-tx</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
</ dependencies>
</ project>
b.第二步:创建规则目录/resources/rules,rules目录中创建规则文件helloworld.drl
package helloworld
rule "rule_helloworld"
when
eval ( true )
then
System . out. println ( "规则:rule_helloworld触发..." ) ;
end
c.第三步:创建Spring配置文件/resources/spring.xml
<?xml version="1.0" encoding="UTF-8"?>
< beans xmlns = " http://www.springframework.org/schema/beans"
xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xmlns: kie= " http://drools.org/schema/kie-spring"
xsi: schemaLocation= " http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://drools.org/schema/kie-spring
http://drools.org/schema/kie-spring.xsd" >
< kie: kmodule id = " kmodule" >
< kie: kbase name = " kbase" packages = " rules" >
< kie: ksession name = " ksession" > </ kie: ksession>
</ kie: kbase>
</ kie: kmodule>
< bean class = " org.kie.spring.annotations.KModuleAnnotationPostProcessor" > </ bean>
</ beans>
d.第四步:编写单元测试类:
package com. itheima. test ;
import org. junit. Test ;
import org. junit. runner. RunWith ;
import org. kie. api. KieBase ;
import org. kie. api. cdi. KBase ;
import org. springframework. test. context. ContextConfiguration ;
import org. springframework. test. context. junit4. SpringJUnit4ClassRunner ;
@RunWith ( SpringJUnit4ClassRunner . class )
@ContextConfiguration ( locations = "classpath:spring.xml" )
public class DroolsSpringTest {
@KBase ( "kbase" )
private KieBase kieBase;
@Test
public void test1 ( ) {
KieSession kieSession = kieBase. newKieSession ( ) ;
kieSession. fireAllRules ( ) ;
kieSession. dispose ( ) ;
}
}
7.2 Spring整合Drools+web
a.第一步:创建maven的war工程drools_springweb并在pom.xml文件中导入相关maven坐标
<?xml version="1.0" encoding="UTF-8"?>
< project xmlns = " http://maven.apache.org/POM/4.0.0" xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion> 4.0.0</ modelVersion>
< groupId> com.itheima</ groupId>
< artifactId> drools_springweb</ artifactId>
< version> 1.0-SNAPSHOT</ version>
< packaging> war</ packaging>
< properties>
< project.build.sourceEncoding> UTF-8</ project.build.sourceEncoding>
< maven.compiler.source> 1.8</ maven.compiler.source>
< maven.compiler.target> 1.8</ maven.compiler.target>
< drools.version> 7.10.0.Final</ drools.version>
< spring.version> 5.0.5.RELEASE</ spring.version>
</ properties>
< dependencies>
< dependency>
< groupId> org.drools</ groupId>
< artifactId> drools-compiler</ artifactId>
< version> ${drools.version}</ version>
</ dependency>
< dependency>
< groupId> junit</ groupId>
< artifactId> junit</ artifactId>
< version> 4.12</ version>
</ dependency>
< dependency>
< groupId> org.kie</ groupId>
< artifactId> kie-spring</ artifactId>
< version> ${drools.version}</ version>
< exclusions>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-tx</ artifactId>
</ exclusion>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-beans</ artifactId>
</ exclusion>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-core</ artifactId>
</ exclusion>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-context</ artifactId>
</ exclusion>
</ exclusions>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-context</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-context-support</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-test</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-tx</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-web</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-webmvc</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
</ dependencies>
< build>
< plugins>
< plugin>
< groupId> org.apache.tomcat.maven</ groupId>
< artifactId> tomcat7-maven-plugin</ artifactId>
< configuration>
< port> 80</ port>
< path> /</ path>
</ configuration>
</ plugin>
</ plugins>
</ build>
</ project>
b.第二步:配置web.xml
<! DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
< web-app>
< display-name> Archetype Created Web Application</ display-name>
< servlet>
< servlet-name> springmvc</ servlet-name>
< servlet-class> org.springframework.web.servlet.DispatcherServlet</ servlet-class>
< init-param>
< param-name> contextConfigLocation</ param-name>
< param-value> classpath:springmvc.xml</ param-value>
</ init-param>
< load-on-startup> 1</ load-on-startup>
</ servlet>
< servlet-mapping>
< servlet-name> springmvc</ servlet-name>
< url-pattern> *.do</ url-pattern>
</ servlet-mapping>
</ web-app>
c.第三步:创建/resources/springmvc.xml文件
< ? xml version= "1.0" encoding= "UTF-8" ? >
< beans xmlns= "http://www.springframework.org/schema/beans"
xmlns: xsi= "http://www.w3.org/2001/XMLSchema-instance"
xmlns: context= "http://www.springframework.org/schema/context"
xmlns: mvc= "http://www.springframework.org/schema/mvc"
xmlns: kie= "http://drools.org/schema/kie-spring"
xsi: schemaLocation= "http: / / www. springframework. org/ schema/ beans
http: / / www. springframework. org/ schema/ beans/ spring- beans. xsd
http: / / drools. org/ schema/ kie- spring
http: / / drools. org/ schema/ kie- spring. xsd
http: / / www. springframework. org/ schema/ mvc
http: / / www. springframework. org/ schema/ mvc/ spring- mvc. xsd
http: / / www. springframework. org/ schema/ context
http: / / www. springframework. org/ schema/ context/ spring- context. xsd">
< kie: kmodule id= "kmodule" >
< kie: kbase name= "kbase" packages= "rules" >
< kie: ksession name= "ksession" > < / kie: ksession>
< / kie: kbase>
< / kie: kmodule>
< bean class = "org.kie.spring.annotations.KModuleAnnotationPostProcessor" / >
< ! -- spring批量扫描-- >
< context: component- scan base- package = "com.itheima" / >
< context: annotation- config/ >
< ! -- springMVC注解驱动-- >
< mvc: annotation- driven/ >
< / beans>
d.第四步:创建规则文件/resources/rules/helloworld.drl
package helloworld
rule "rule_helloworld"
when
eval ( true )
then
System . out. println ( "规则:rule_helloworld触发..." ) ;
end
e.第五步:创建RuleService
package com. itheima. service ;
import org. kie. api. KieBase ;
import org. kie. api. cdi. KBase ;
import org. kie. api. runtime. KieSession ;
import org. springframework. stereotype. Service ;
@Service
public class RuleService {
@KBase ( "kbase" )
private KieBase kieBase;
public void rule ( ) {
KieSession kieSession = kieBase. newKieSession ( ) ;
kieSession. fireAllRules ( ) ;
kieSession. dispose ( ) ;
}
}
f.第六步:创建HelloController
package com. itheima. controller ;
import com. itheima. service. RuleService ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. web. bind. annotation. RequestMapping ;
import org. springframework. web. bind. annotation. RestController ;
@RestController
@RequestMapping ( "/hello" )
public class HelloController {
@Autowired
private RuleService ruleService;
@RequestMapping ( "/rule" )
public String rule ( ) {
ruleService. rule ( ) ;
return "OK" ;
}
}
7.3 Spring Boot整合Drools
a.第一步:创建maven工程drools_springboot并配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
< project xmlns = " http://maven.apache.org/POM/4.0.0"
xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
< parent>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starters</ artifactId>
< version> 2.0.6.RELEASE</ version>
</ parent>
< modelVersion> 4.0.0</ modelVersion>
< groupId> com.itheima</ groupId>
< artifactId> drools_springboot</ artifactId>
< version> 1.0-SNAPSHOT</ version>
< dependencies>
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-web</ artifactId>
</ dependency>
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-aop</ artifactId>
</ dependency>
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-test</ artifactId>
</ dependency>
< dependency>
< groupId> commons-lang</ groupId>
< artifactId> commons-lang</ artifactId>
< version> 2.6</ version>
</ dependency>
< dependency>
< groupId> org.drools</ groupId>
< artifactId> drools-core</ artifactId>
< version> 7.6.0.Final</ version>
</ dependency>
< dependency>
< groupId> org.drools</ groupId>
< artifactId> drools-compiler</ artifactId>
< version> 7.6.0.Final</ version>
</ dependency>
< dependency>
< groupId> org.drools</ groupId>
< artifactId> drools-templates</ artifactId>
< version> 7.6.0.Final</ version>
</ dependency>
< dependency>
< groupId> org.kie</ groupId>
< artifactId> kie-api</ artifactId>
< version> 7.6.0.Final</ version>
</ dependency>
< dependency>
< groupId> org.kie</ groupId>
< artifactId> kie-spring</ artifactId>
< exclusions>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-tx</ artifactId>
</ exclusion>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-beans</ artifactId>
</ exclusion>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-core</ artifactId>
</ exclusion>
< exclusion>
< groupId> org.springframework</ groupId>
< artifactId> spring-context</ artifactId>
</ exclusion>
</ exclusions>
< version> 7.6.0.Final</ version>
</ dependency>
</ dependencies>
< build>
< finalName> ${project.artifactId}</ finalName>
< resources>
< resource>
< directory> src/main/java</ directory>
< includes>
< include> **/*.xml</ include>
</ includes>
< filtering> false</ filtering>
</ resource>
< resource>
< directory> src/main/resources</ directory>
< includes>
< include> **/*.*</ include>
</ includes>
< filtering> false</ filtering>
</ resource>
</ resources>
< plugins>
< plugin>
< groupId> org.apache.maven.plugins</ groupId>
< artifactId> maven-compiler-plugin</ artifactId>
< version> 2.3.2</ version>
< configuration>
< source> 1.8</ source>
< target> 1.8</ target>
</ configuration>
</ plugin>
</ plugins>
</ build>
</ project>
b.第二步:创建/resources/application.yml文件
server :
port : 8080
spring :
application :
name : drools_springboot
c.第三步:创建规则文件/resources/rules/helloworld.drl
package helloworld
rule "rule_helloworld"
when
eval ( true )
then
System . out. println ( "规则:rule_helloworld触发..." ) ;
end
d.第四步:编写配置类DroolsConfig
package com. itheima. drools. config ;
import org. kie. api. KieBase ;
import org. kie. api. KieServices ;
import org. kie. api. builder. KieBuilder ;
import org. kie. api. builder. KieFileSystem ;
import org. kie. api. builder. KieRepository ;
import org. kie. api. runtime. KieContainer ;
import org. kie. api. runtime. KieSession ;
import org. kie. internal. io. ResourceFactory ;
import org. kie. spring. KModuleBeanFactoryPostProcessor ;
import org. springframework. boot. autoconfigure. condition. ConditionalOnMissingBean ;
import org. springframework. context. annotation. Bean ;
import org. springframework. context. annotation. Configuration ;
import org. springframework. core. io. support. PathMatchingResourcePatternResolver ;
import org. springframework. core. io. support. ResourcePatternResolver ;
import org. springframework. core. io. Resource ;
import java. io. IOException ;
@Configuration
public class DroolsConfig {
private static final String RULES_PATH = "rules/" ;
private final KieServices kieServices = KieServices. Factory . get ( ) ;
@Bean
@ConditionalOnMissingBean
public KieFileSystem kieFileSystem ( ) throws IOException {
KieFileSystem kieFileSystem = kieServices. newKieFileSystem ( ) ;
ResourcePatternResolver resourcePatternResolver =
new PathMatchingResourcePatternResolver ( ) ;
Resource [ ] files =
resourcePatternResolver. getResources ( "classpath*:" + RULES_PATH + "*.*" ) ;
String path = null ;
for ( Resource file : files) {
path = RULES_PATH + file. getFilename ( ) ;
kieFileSystem. write ( ResourceFactory . newClassPathResource ( path, "UTF-8" ) ) ;
}
return kieFileSystem;
}
@Bean
@ConditionalOnMissingBean
public KieContainer kieContainer ( ) throws IOException {
KieRepository kieRepository = kieServices. getRepository ( ) ;
kieRepository. addKieModule ( kieRepository:: getDefaultReleaseId ) ;
KieBuilder kieBuilder = kieServices. newKieBuilder ( kieFileSystem ( ) ) ;
kieBuilder. buildAll ( ) ;
return kieServices. newKieContainer ( kieRepository. getDefaultReleaseId ( ) ) ;
}
@Bean
@ConditionalOnMissingBean
public KieBase kieBase ( ) throws IOException {
return kieContainer ( ) . getKieBase ( ) ;
}
@Bean
@ConditionalOnMissingBean
public KModuleBeanFactoryPostProcessor kiePostProcessor ( ) {
return new KModuleBeanFactoryPostProcessor ( ) ;
}
}
e.第五步:创建RuleService类
package com. itheima. drools. service ;
import org. kie. api. KieBase ;
import org. kie. api. runtime. KieSession ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. stereotype. Service ;
@Service
public class RuleService {
@Autowired
private KieBase kieBase;
public void rule ( ) {
KieSession kieSession = kieBase. newKieSession ( ) ;
kieSession. fireAllRules ( ) ;
kieSession. dispose ( ) ;
}
}
f.第六步:创建HelloController类
package com. itheima. drools. controller ;
import com. itheima. drools. service. RuleService ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. web. bind. annotation. RequestMapping ;
import org. springframework. web. bind. annotation. RestController ;
@RestController
@RequestMapping ( "/hello" )
public class HelloController {
@Autowired
private RuleService ruleService;
@RequestMapping ( "/rule" )
public String rule ( ) {
ruleService. rule ( ) ;
return "OK" ;
}
}
g.第七步:创建启动类DroolsApplication
package com. itheima. drools ;
import org. springframework. boot. SpringApplication ;
import org. springframework. boot. autoconfigure. SpringBootApplication ;
@SpringBootApplication
public class DroolsApplication {
public static void main ( String [ ] args) {
SpringApplication . run ( DroolsApplication . class , args) ;
}
}
h.第八步:启动服务,访问http://localhost:8080/hello/rule