类 NkScriptManagerImpl
java.lang.Object
cn.nkpro.elcube.platform.service.impl.NkScriptManagerImpl
- 所有已实现的接口:
DeployAble,NkScriptManager,EventListener,org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>
@Order(30)
@Service
public class NkScriptManagerImpl
extends Object
implements NkScriptManager, DeployAble
Created by bean on 2020/7/17.
Updated by bean on 2021/11/29.
-
构造器概要
构造器 -
方法概要
修饰符和类型方法说明激活脚本voidvoidexportConfig(com.alibaba.fastjson.JSONObject config, com.alibaba.fastjson.JSONObject export)getPage(String keyword, String type, String version, String state, int from, int rows, String orderField, String order)voidimportConfig(com.alibaba.fastjson.JSONObject data)voidloadExport(com.alibaba.fastjson.JSONArray exports)voidonApplicationEvent(@NotNull org.springframework.context.ApplicationEvent event)
-
构造器详细资料
-
NkScriptManagerImpl
public NkScriptManagerImpl()
-
-
方法详细资料
-
getPage
public PageList<PlatformScript> getPage(String keyword, String type, String version, String state, int from, int rows, String orderField, String order)- 指定者:
getPage在接口中NkScriptManager
-
getActiveResources
- 指定者:
getActiveResources在接口中NkScriptManager
-
getScript
- 指定者:
getScript在接口中NkScriptManager
-
doRun
- 指定者:
doRun在接口中NkScriptManager
-
doBreach
- 指定者:
doBreach在接口中NkScriptManager
-
doUpdate
- 指定者:
doUpdate在接口中NkScriptManager
-
doActive
激活脚本
注意:由于系统可能是分布式的,那么一个节点激活脚本后,应把激活的脚本同步到其他节点
系统为了避免使用过于复杂的分布式管理工具,采用redis心跳的方式处理脚本的同步,具体步骤如下:
step1: 激活脚本时,会重新计算脚本的md5值
step2: 激活后更新缓存中的随机值以及激活操作所在节点的scriptRandom属性,因为激活节点的值与redis保持一致,因此不会重复激活
step3: 每个节点都会有心跳检测随机值变化,一旦随机值变化,就重新加载脚本
step4: 根据md5值的变化,编译新的脚本编译对象并注入到Spring容器
随机值有两份 1、本类中的scriptRandom属性,2、缓存中的CACHE_DEF_SCRIPT_RANDOM
在 onApplicationEvent 方法中判断两个值是否一致,如果不一致,会根据md5值重新加载脚本
- 指定者:
doActive在接口中NkScriptManager- 另请参阅:
scriptRandom,Constants.CACHE_DEF_SCRIPT_RANDOM,onApplicationEvent(ApplicationEvent)
-
doDelete
- 指定者:
doDelete在接口中NkScriptManager
-
onApplicationEvent
public void onApplicationEvent(@NotNull @NotNull org.springframework.context.ApplicationEvent event)- 指定者:
onApplicationEvent在接口中org.springframework.context.ApplicationListener<org.springframework.context.ApplicationEvent>
-
loadExport
public void loadExport(com.alibaba.fastjson.JSONArray exports)- 指定者:
loadExport在接口中DeployAble
-
exportConfig
public void exportConfig(com.alibaba.fastjson.JSONObject config, com.alibaba.fastjson.JSONObject export)- 指定者:
exportConfig在接口中DeployAble
-
importConfig
public void importConfig(com.alibaba.fastjson.JSONObject data)- 指定者:
importConfig在接口中DeployAble
-