数据上下文
概念
在执行器执行流程时会分配唯一的一个数据上下文实例给这个请求。不同请求的数据上下文实例是完全隔离的。里面存放着此请求所有的用户数据。不同的组件之间是不传递参数的,所有的数据交互都是通过这个数据上下文来实现的。
笔记
在之前的2.6.X版本中有一个数据槽(SLOT)的概念,在2.7.X中你无需关心数据槽的概念了。你只需要关注上下文的概念就可以了。
事实上,SLOT依旧存在,只不过里面包了上下文这个概念。如果你不是从2.6.X迁移过来的用户,不用关心这一条笔记。
# 默认上下文
LiteFlow提供了一个默认的数据上下文的实现:DefaultContext
。这个默认的实现其实里面主要存储数据的容器就是一个Map。
你可以通过DefaultContext
中的setData
方法放入数据,通过getData
方法获得数据。
建议
DefaultContext
虽然可以用,但是在实际业务中,用这个会存在大量的弱类型,存取数据的时候都要进行强转,颇为不方便。所以官方建议你自己去实现自己的数据上下文。
# 自定义上下文
你可以用你自己的任意的Bean当做上下文进行传入。LiteFlow对上下文的Bean没有任何要求。
自己定义的上下文实质上就是一个最简单的值对象,自己定义的上下文因为是强类型,更加贴合业务。
你可以像这样进行传入:
LiteflowResponse<CustomContext> response = flowExecutor.execute("chain1", "初始参数", CustomContext.class);
传入之后, LiteFlow会在调用时进行初始化,给这个上下文分配唯一的实例。你在组件之中可以这样去获得这个上下文实例:
@Component("yourCmpName")
public class YourCmp extends NodeComponent {
@Override
public void process() {
YourContextBean context = this.getContextBean();
//do your biz
}
}
关于组件之中还可以获得哪些默认的参数,请参考普通组件。
# 上下文的数量
在LiteFlow的配置中,会提供一个slotSize的参数可以去配置上下文初始化数量,但是这个默认值就是1024,从2.6.0版本开始,当上下文数量不够时,会按照0.75的因子去进行自动扩容。所以这个值不推荐主动配置。除非有特殊情况。
帮助我们改善此文档 (opens new window)
上次更新: 2022/10/07, 00:22:18