您的位置 首页 > 德语词汇

scripting是什么意思?用法、例句?聊聊maxwell的Scripting

本篇文章给大家谈谈scripting是什么意思?用法、例句,以及聊聊maxwell的Scripting对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文主要研究一下maxwell的Scripting

scripting是什么意思?用法、例句?聊聊maxwell的Scripting

maxwell-1.25.1/src/main/java/com/zendesk/maxwell/scripting/Scripting.java

publicclassScripting{\nstaticfinalLoggerLOGGER=LoggerFactory.getLogger(Scripting.class);\n?\nprivatefinalScriptObjectMirrorprocessRowFunc,processHeartbeatFunc,processDDLFunc;\n?\nprivateScriptObjectMirrorgetFunc(ScriptEngineengine,StringfName,Stringfilename){\nScriptObjectMirrorf=(ScriptObjectMirror)engine.get(fName);\nif(f==null)\nreturnnull;\nelseif(!f.isFunction()){\nthrownewRuntimeException("Expected"+fName+"tobeafunction!");\n}else{\nLOGGER.info("usingfunction"+fName+"from"+filename);\n}\nreturnf;\n}\n?\npublicScripting(Stringfilename)throwsIOException,ScriptException,NoSuchMethodException{\nScriptEngineManagermanager=newScriptEngineManager();\nScriptEngineengine=manager.getEngineByName("nashorn");\n?\nStringexternJS=newString(Files.readAllBytes(Paths.get(filename)));\nengine.put("logger",LOGGER);\nengine.eval(externJS);\n?\nprocessRowFunc=getFunc(engine,"process_row",filename);\nprocessHeartbeatFunc=getFunc(engine,"process_heartbeat",filename);\nprocessDDLFunc=getFunc(engine,"process_ddl",filename);\n?\nif(processRowFunc==null&&processHeartbeatFunc==null&&processDDLFunc==null)\nLOGGER.warn("expected"+filename+"todefineatleastoneof:process_row,process_heartbeat,process_ddl");\n}\n?\npublicvoidinvoke(RowMaprow){\nif(rowinstanceofHeartbeatRowMap&&processHeartbeatFunc!=null)\nprocessHeartbeatFunc.call(null,newWrappedHeartbeatMap((HeartbeatRowMap)row));\nelseif(rowinstanceofDDLMap&&processDDLFunc!=null)\nprocessDDLFunc.call(null,newWrappedDDLMap((DDLMap)row));\nelseif(rowinstanceofRowMap&&processRowFunc!=null)\nprocessRowFunc.call(null,newWrappedRowMap(row));\n}\n?\nprivatestaticThreadLocal<ScriptEngine>stringifyEngineThreadLocal=ThreadLocal.withInitial(()->{\nScriptEngineManagermanager=newScriptEngineManager();\nreturnmanager.getEngineByName("nashorn");\n});\n?\npublicstaticStringstringify(ScriptObjectMirrormirror)throwsScriptException{\nScriptObjectMirrorjson=(ScriptObjectMirror)stringifyEngineThreadLocal.get().eval("JSON");\nreturn(String)json.callMember("stringify",mirror);\n}\n}Scripting定义了processRowFunc、processHeartbeatFunc、processDDLFunc属性;其构造器接收filename参数,它创建ScriptEngineManager,然后获取名为nashorn的ScriptEngine,之后通过filename获取externJS,并执行engine.eval(externJS),之后通过getFunc方法初始化化processRowFunc、processHeartbeatFunc、processDDLFunc;其getFunc方法通过engine.get(fName)获取ScriptObjectMirror;其invoke方法针对HeartbeatRowMap执行processHeartbeatFunc.call,针对DDLMap执行processDDLFunc.call,针对RowMap执行processRowFunc.callMaxwellConfig

maxwell-1.25.1/src/main/java/com/zendesk/maxwell/MaxwellConfig.java

publicclassMaxwellConfigextendsAbstractConfig{\nstaticfinalLoggerLOGGER=LoggerFactory.getLogger(MaxwellConfig.class);\n?\n//......\n?\npublicStringjavascriptFile;\npublicScriptingscripting;\n?\n//......\n?\npublicvoidvalidate(){\nvalidatePartitionBy();\nvalidateFilter();\n?\n//......\n?\nif(this.javascriptFile!=null){\ntry{\nthis.scripting=newScripting(this.javascriptFile);\n}catch(Exceptione){\nLOGGER.error("Errorsettingupjavascript:",e);\nSystem.exit(1);\n}\n}\n}\n?\n//......\n?\n}MaxwellConfig的validate方法在javascriptFile不为null的时候会创建Scripting,如果出现异常则执行System.exit(1)小结

Scripting定义了processRowFunc、processHeartbeatFunc、processDDLFunc属性;其构造器接收filename参数,它创建ScriptEngineManager,然后获取名为nashorn的ScriptEngine,之后通过filename获取externJS,并执行engine.eval(externJS),之后通过getFunc方法初始化化processRowFunc、processHeartbeatFunc、processDDLFunc;其getFunc方法通过engine.get(fName)获取ScriptObjectMirror;其invoke方法针对HeartbeatRowMap执行processHeartbeatFunc.call,针对DDLMap执行processDDLFunc.call,针对RowMap执行processRowFunc.call

如果你还想了解更多这方面的信息,记得收藏关注本站。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023