类 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.
  • 构造器详细资料

    • 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

      public List<PlatformScriptWithBLOBs> getActiveResources()
      指定者:
      getActiveResources 在接口中 NkScriptManager
    • getScript

      public PlatformScript getScript(String scriptName, String version)
      指定者:
      getScript 在接口中 NkScriptManager
    • doRun

      @Transactional public PlatformScript doRun(NkScriptV scriptDefH, boolean run)
      指定者:
      doRun 在接口中 NkScriptManager
    • doBreach

      @Transactional public PlatformScript doBreach(NkScriptV scriptDefH)
      指定者:
      doBreach 在接口中 NkScriptManager
    • doUpdate

      @Transactional public PlatformScript doUpdate(NkScriptV scriptDefH, boolean force)
      指定者:
      doUpdate 在接口中 NkScriptManager
    • doActive

      @Transactional public PlatformScript doActive(NkScriptV scriptDefH, boolean force)

      激活脚本

      注意:由于系统可能是分布式的,那么一个节点激活脚本后,应把激活的脚本同步到其他节点

      系统为了避免使用过于复杂的分布式管理工具,采用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

      @Transactional public void doDelete(NkScriptV scriptDefH)
      指定者:
      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