• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:DataX-插件加载器

java 搞代码 4年前 (2022-01-27) 33次浏览 已收录 0个评论

背景及解决方案

咱们假如一个状况,hbase的reader是1.0版本的,hbase的writer是2.0版本的,所以他们依赖的jar包版本也不统一,如果间接一起加载到JVM虚拟机,那就会有jar包的抵触。

为了防止抵触,就须要给每个插件都设置一个本人的类加载器(类加载的程序参考之前的jvm – 类的加载),这样不同版本的jar包就不会抵触。

上面用streamreader的job初始化具体的解说这个流程。

JarLoader

JarLoader是每个插件的类加载器,为了防止反复的生成,会通过map的模式寄存在内存jarLoaderCenter中,key就是plugin.pluginType.pluginName,value就是JarLoader。

pluginType是一个枚举,包含reader、writer、transformer、handler,pluginName就是插件的名称。比方streamreader的key就是plugin.reader.streamreader。

每次获取类加载器的时候,就会从jarLoaderCenter中获取,如果有对应的key-value,就返回JarLoader,如果没有,就创立一个JarLoader,并存入jarLoaderCenter再返回JarLoader。

JarLoader创立

如果jarLoaderCenter没有对应的JarLoader,就会创立一个JarLoader。

首先是获取门路path,就是读取reader.streamreader的plugin.json配置文件中生成的path信息。

在创立JarLoader的时候,就会把path门路的jar文件以及子门路的jar文件都退出退出到class path中,所以每个插件所须要的jar包在通过JarLoader加载的时候是互相隔离的,这样就防止的jar包抵触。

比方加载的时候,streamreader除了把streamreader-0.0.1-SNAPSHOT.jar加载进来,也会加载libs以下的包。

ClassLoaderSwapper

因为咱们须要在不同的中央应用不同的类加载器,所以在应用之前就须要对类加载器进行切换。

比方以后(用黄色代表)的类加载器是A,咱们当初应用类加载B。

咱们首先把以后的类加载器存起来,放入紫色(storeClassLoader)中暂存。而后再把须要应用的类加载B放入黄色中,代表以后应用的类加载是B。

而后就能够应用B进行类加载,当应用完后,就须要把暂存在紫色的类加载器进行还原。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:DataX-插件加载器

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址