DataX(4)——加载插件

加载外部插件,为了避免依赖冲突,需要自定义类加载器,然后用自定义类加载器创建reader类,最后类加载器要换回原本的。

getJarLoader

首先获取pluginConf,pluginConf是在一开始生成configuration就已经注册了。内容就是插件下面的plugin.json文件内容。

plugin.json(pluginConf) 中最主要的是name和class,name跟job配置中一致,class是对应的要加载的类的全限定路径名。

生成jarLoader

优先从_jarLoaderCenter_缓存中获取,要是没有就创建并放到缓存中。

jarLoader会加载对应路径下面的所有jar。这里的jar和libs里面的依赖jar都会加载。

缓存当前的classLoader

ClassLoaderSwapper负责缓存classLoader,只有两个方法,一个缓存当前classLoader,一个还原成缓存的classLoader。

加载JobPlugin

可以看到使用对应的jarLoader来加载job类,因为是内部类,所以名称是{plugin类名}$Job

还原缓存的classLoader

为什么要新建一个jarLoader来加载plugin对应的类和依赖类?

java类加载是双亲委派模型:要是一个类加载器要加载,它不会先加载,而是交给它的父级类加载器来加载,只有父加载器无法加载才会到子加载器加载,这样保证相同名称的类只会被加载一次。

但是在datax插件开发,一方面datax插件jar和datax的框架jar是隔离的,在运行的时候只会加载相应的插件,而不是加载全部插件,另一方面会碰见jar之间依赖版本冲突的情况,比如common的版本不一致、hbase版本不一致不能启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值