【1】入口
ConfigParser::parse
方法参数为命令行中指定的作业配置文件。
【2】配置保存方式
datax使用Configuration类保存作业配置,保存方式简单粗暴。Configuration类部分代码如下:
public class Configuration { /** * 对于加密的keyPath,需要记录下来 * 为的是后面分布式情况下将该值加密后抛到DataXServer中 */ private Set<String> secretKeyPathSet = new HashSet<String>(); private Object root = null;
加密暂时忽略,可以看到,Configuration类中仅有一个root变量。后面可以看到,这个root变量实际上是JSONObject对象。
通过Configuration类封装的一些方法,datax可直接通过path方式,获取到对应的配置。
【3】配置组成
datax加载了三部分配置,分别为:作业json文件配置、插件配置、默认配置。其中插件配置,又包含了本次作业插件与handler插件。
作业json文件配置
将作业json文件解析成字符串,之后再生成JSONObject对象。
这里有以下的点值得注意:
1、支持http方式获取配置文件 本文不对这部分进行详细讨论。这个点为datax可视化配置提供了方便,可以使用某个接口,返回作业配置文件。 2、配置文件支持变量 可以看到有对${xxxx}进行查找替换的代码,因此可推定,datax是支持使用${xxx}方式的变量的。通过肉眼看代码,这部分取的应该是系统环境变量。 public static String replaceVariable(final String param) { Map<String, String> mapping = new HashMap<String, String>(); Matcher matcher = VARIABLE_PATTERN.matcher(param); while (matcher.find()) { String variable = matcher.group(2); String value = System.getProperty(variable); if (StringUtils.isBlank(value)) { value = matcher.group(); } mapping.put(matcher.group(), value); } String retString = param; for (final String key : mapping.keySet()) { retString = retString.replace(key, mapping.get(key)); } return retString; }
3、支持加密字符串配置
因为配置文件中可能需要配置密码,因此datax支持了加密。
public static Configuration parseJobConfig(final String path) {
String jobContent = getJobContent(path); // 获取到配置文件的内容(可能来自网络)
Configuration config = Configuration.from(jobContent);// 解析配置文件字符串
return SecretUtil.decryptSecretKey(config);
}
这一点在几年前的版本中是没有的,本人在某银行工作时,改造过datax,采用类似方式实现了加密功能,并且编写了单独的可执行jar包,方便获取字符串的加密串。
解析作业文件之后的root变量:
至此,作业文件的所有配置,都保存到了root中。
合并默认配置
可以看到,datax合并了core.json中的默认配置。如果需要默认配置,可修改该文件。该文件在core工程下的src/main/conf目录下。
合并插件配置
datax获取作业配置文件中的读写插件名称、handler插件名称,并获取这些插件的配置。
当前版本代码中,这块的大体逻辑是:
遍历编译完成后的datax/plugin/reader(和writer)下的所有目录(大概几十个reader、writer吧),每一个都和插件名称对比,如果符合的话,就解析它的配置。
这块是可以优化一下的。倒不会提升多少性能,因为debug时,如果有很多目录,这里会循环很多次。
一旦找到符合的插件名称,就会拼接出这样一个文件名称:
这个plugin.json,就是对应插件工程下的资源文件。从这个文件中可以提取到插件对应的Java类名,这就为实例化插件做好了准备:
此时的配置是这样的:
也就是,作业文件配置、默认配置、插件配置,全都拿到了。
以上就是datax解析json配置文件的过程。
标签:插件,Configuration,String,配置文件,配置,源码,datax,加载,DataX From: https://www.cnblogs.com/xujq/p/16962846.html