
流程编排框架、并发框架、微服务业务整合框架
业务可视
编排好的图示模型即为代码真实的执行链路,以所见即所得的方式在技术和业务之间架起一道通用语言的桥梁
动态配置
主流程、子流程、角色、变量等支持动态化配置,支持包括开源和公司自研在内的全部存储介质
业务抽象
引入资源、权限、角色等概念,构建定制化业务身份,为抽象化业务能力提供技术支持和解决方案
# 快速开始
TIP
下面步骤仅为简单介绍,具体细节请参考使用文档
# 1、配置引入
<dependency>
<groupId>cn.kstry.framework</groupId>
<artifactId>kstry-core</artifactId>
<version>1.1.10</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 2、项目引入
@EnableKstry(bpmnPath = "./bpmn/*.bpmn")
@SpringBootApplication
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 GoodsService {
@NoticeResult
@TaskService
public GoodsDetail initBaseInfo(@ReqTaskParam(reqSelf = true) GoodsDetailRequest request) {
return GoodsDetail.builder().id(request.getId()).name("商品").build();
}
}
@Data
public class GoodsDetailRequest{
private long id;
}
@Data
@Builder
public class GoodsDetail{
private long id;
private String name;
}
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
# 4、定义bpmn配置文件
# 方式一:BPMN配置文件定义流程
TIP
BPMN文件(流程图文件)流程配置地址:Kstry流程配置台 (opens new window)
# 方式二:代码定义流程
TIP
如果没有BPMN配置文件,全部是代码定义流程时,@EnableKstry
注解的 bpmnPath
参数可以为空
@Configuration
public class ProcessDiagramConfiguration {
@Bean
public ProcessLink buildShowGoodsLink() {
StartProcessLink bpmnLink = StartProcessLink.build(ProcessDiagramConfiguration::buildShowGoodsLink, "展示商品详情");
bpmnLink.nextService(GoodsService::initBaseInfo).end();
return bpmnLink;
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 5、调用执行
@RestController
@RequestMapping("/goods")
public class GoodsController {
@Resource
private StoryEngine storyEngine;
@PostMapping("/show")
public GoodsDetail showGoods(@RequestBody GoodsDetailRequest request) {
StoryRequest<GoodsDetail> req = ReqBuilder.returnType(GoodsDetail.class).startProcess(ProcessDiagramConfiguration::buildShowGoodsLink).request(request).build();
TaskResponse<GoodsDetail> fire = storyEngine.fire(req);
if (fire.isSuccess()) {
return fire.getResult();
}
return null;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18