流程编排、规则判断、并发、微服务整合框架
业务可视
编排好的图示模型即为代码真实的执行链路,以所见即所得的方式在技术和业务之间架起一道通用语言的桥梁
动态配置
主流程、子流程、角色、变量等支持动态化配置,支持包括开源和公司自研在内的全部存储介质
业务抽象
引入资源、权限、角色等概念,构建定制化业务身份,为抽象化业务能力提供技术支持和解决方案
# 相关文档
TIP
# 接入成本极低
# 1、配置引入
<dependency>
<groupId>cn.kstry.framework</groupId>
<artifactId>kstry-core</artifactId>
<version>1.1.16</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 2、项目引入
@SpringBootApplication
@EnableKstry(bpmnPath = "./bpmn/*.bpmn")
public class KstryDemoApplication {
public static void main(String[] args) {
SpringApplication.run(KstryDemoApplication.class, args);
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 3、编写组件代码
@TaskComponent
public class CalculateService {
@TaskService
public ScopeDataNotice setNumber() {
return ScopeDataNotice.var().notice("b", 10);
}
@NoticeResult
@TaskService
public int plusCalculate(@VarTaskParam int a, @VarTaskParam int b) {
return a + b;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 4、流程配置
# 方式一:BPMN配置文件定义流程
TIP
BPMN文件(流程图文件)流程配置地址:Kstry流程配置台 (opens new window)
# 方式二:代码定义流程
@Configuration
public class ProcessConfig {
@Bean
public ProcessLink testSimpleFlowDemoProcess() {
StartProcessLink processLink = StartProcessLink.build(ProcessConfig::testSimpleFlowDemoProcess);
processLink
.nextService(CalculateService::setNumber).build()
.nextService(CalculateService::plusCalculate).build()
.end();
return processLink;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 5、调用执行
@Test
public void testSimpleFlowDemo() {
RuleJudgeRequest ruleJudgeRequest = new RuleJudgeRequest();
ruleJudgeRequest.setA(5);
// 流程配置执行
StoryRequest<Integer> fireRequest = ReqBuilder.returnType(Integer.class)
.trackingType(TrackingTypeEnum.SERVICE_DETAIL).varScopeData(ruleJudgeRequest).startId("test-simple-flow-demo")
.build();
TaskResponse<Integer> result = storyEngine.fire(fireRequest);
Assert.assertTrue(result.isSuccess());
Assert.assertEquals(15, (int) result.getResult());
// 代码定义执行
fireRequest = ReqBuilder.returnType(Integer.class)
.trackingType(TrackingTypeEnum.SERVICE_DETAIL).varScopeData(ruleJudgeRequest).startProcess(ProcessConfig::testSimpleFlowDemoProcess)
.build();
result = storyEngine.fire(fireRequest);
Assert.assertTrue(result.isSuccess());
Assert.assertEquals(15, (int) result.getResult());
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21