代码拉取完成,页面将自动刷新
276
[ISSUE #I91B0Y] 提供规则和脚本的创建回调和刷新回调
已关闭
issue链接
提供规则和脚本节点创建和刷新的回调接口,用户可以实现这些接口,并将其实现类注册到spring容器中,当规则或脚本节点被创建(刷新)后,会执行回调接口中的相应逻辑。
如果想要在所有规则创建之后,执行某些逻辑,可以实现如下接口,并将其注册到spring容器中:
public interface RuleCreatedCallback {
void afterCreated(RuleArg arg);
default int getOrder() {
int h = this.hashCode();
return this.hashCode()^ (h >>> 16);
}
}
上面接口中,afterCreated方法是想要在规则创建之后执行的逻辑,其参数中包含了当前创建规则的id以及规则的el表达式
如果想要在所有规则刷新之后,执行某些逻辑,可以实现如下接口,并将其注册到spring容器中:
public interface RuleReloadedCallback {
void afterReloaded(RuleArg arg);
default int getOrder() {
//使用hashcode作为默认order,这样做是为了防止存在多个callback时,order相同导致TreeSet覆盖的问题
int h = this.hashCode();
return this.hashCode()^ (h >>> 16);
}
}
如果想要在所有脚本节点创建之后,执行某些逻辑,可以实现如下接口,并将其注册到spring容器中:
public interface ScriptCreatedCallback {
void afterCreated(ScriptArg arg);
default int getOrder() {
//使用hashcode作为默认order,这样做是为了防止存在多个callback时,order相同导致TreeSet覆盖的问题
int h = this.hashCode();
return this.hashCode()^ (h >>> 16);
}
}
参数ScriptArg中包含了脚本节点的id和脚本内容
如果想要在所有规则刷新之后,执行某些逻辑,可以实现如下接口,并将其注册到spring容器中:
public interface ScriptReloadedCallback {
void afterReloaded(ScriptArg arg);
default int getOrder() {
//使用hashcode作为默认order,这样做是为了防止存在多个callback时,order相同导致TreeSet覆盖的问题
int h = this.hashCode();
return this.hashCode()^ (h >>> 16);
}
}
需要注意的点有:
- 该特性仅在spring环境(包括springboot)下可用
- 用户可以实现多个相同的回调函数,如实现多个RuleCreatedCallback,但是这些实现类必须重写getOrder方法,返回各个类的执行顺序,并且各个类的getOrder方法不能返回相同的值,否则会发生互相覆盖。如果有多个相同回调接口的实现类,这些类会按照getOrder返回值从小到大的顺序执行;如果如果有多个相同回调接口的实现类,并且这些类没有重写getOrder方法,那么它们的执行顺序是不可预测的
- 对于规则的手动刷新,也可以正常触发刷新回调函数;但是如果仅仅刷新一个脚本节点的脚本内容,是不会触发该回调的(即使用下面的方法刷新,不会触发脚本的刷新回调)
ScriptExecutorFactory.loadInstance().getScriptExecutor("groovy").load(nodeId, script);
- 所有回调函数都会在规则或脚本节点创建(刷新)完成之后被调用