Flinkx如何通过json文件定位读写插件

2023-11-11 21:58
文章标签 json 读写 定位 插件 flinkx

本文主要是介绍Flinkx如何通过json文件定位读写插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

Flinkx作为数据同步工具,它通过json配置文件来确定多源到多源的数据同步和同步策略,这次就来看看Flinkx是如何通过json配置文件来定位reader和writer端的

整体结构

在这里插入图片描述

从Flinkx项目里可以看到,它对每个数据源都定义了core,reader输出端,writer输入端。当然也有意外,hive和redis只要输入。

Flinkx是如何通过json配置文件定位这个源呢

看源码

定位到D:\Projects\flinkx-1.8.5\flinkx-core\src\main\java\com\dtstack\flinkx\Main.java

1. 先看下如何定位reader端,在第113行

BaseDataReader dataReader = DataReaderFactory.getDataReader(config, env);
// 进入getDataReader方法:
public static BaseDataReader getDataReader(DataTransferConfig config, StreamExecutionEnvironment env) {try {// 通过配置文件获取插件名String pluginName = config.getJob().getContent().get(0).getReader().getName();// 通过插件名找到插件的类名String pluginClassName = PluginUtil.getPluginClassName(pluginName);// 在获取插件名的文件路径和公共插件文件路径Set<URL> urlList = PluginUtil.getJarFileDirPath(pluginName, config.getPluginRoot());// 通过文件路径加载类,得到构造函数,实例化插件return ClassLoaderManager.newInstance(urlList, cl -> {Class<?> clazz = cl.loadClass(pluginClassName);Constructor constructor = clazz.getConstructor(DataTransferConfig.class, StreamExecutionEnvironment.class);return (BaseDataReader)constructor.newInstance(config, env);});} catch (Exception e) {throw new RuntimeException(e);}}

在每个json配置文件中,都需要配置job.content.reader.name="xxxreader"参数,这个name就是插件名,通过该名字才可以找到相应的插件。实例化插件还需要导入公共的插件plugins/common/flinkx-rdb-**.jar

2. 在看看writer端,在122行

BaseDataWriter dataWriter = DataWriterFactory.getDataWriter(config);
// 进入getDataWriter方法
public static BaseDataWriter getDataWriter(DataTransferConfig config) {try {String pluginName = config.getJob().getContent().get(0).getWriter().getName();String pluginClassName = PluginUtil.getPluginClassName(pluginName);Set<URL> urlList = PluginUtil.getJarFileDirPath(pluginName, config.getPluginRoot());return ClassLoaderManager.newInstance(urlList, cl -> {Class<?> clazz = cl.loadClass(pluginClassName);Constructor constructor = clazz.getConstructor(DataTransferConfig.class);return (BaseDataWriter)constructor.newInstance(config);});} catch (Exception e) {throw new RuntimeException(e);}}

与reader端同理,通过name确定相应的writer端

这篇关于Flinkx如何通过json文件定位读写插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/393067

相关文章

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

maven中的maven-antrun-plugin插件示例详解

《maven中的maven-antrun-plugin插件示例详解》maven-antrun-plugin是Maven生态中一个强大的工具,尤其适合需要复用Ant脚本或实现复杂构建逻辑的场景... 目录1. 核心功能2. 典型使用场景3. 配置示例4. 关键配置项5. 优缺点分析6. 最佳实践7. 常见问题

ShardingSphere之读写分离方式

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录ShardingSphere-读写分离读写分离mysql主从集群创建 user 表主节点执行见表语句项目代码读写分

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

Idea插件MybatisX失效的问题解决

《Idea插件MybatisX失效的问题解决》:本文主要介绍Idea插件MybatisX失效的问题解决,详细的介绍了4种问题的解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、重启idea或者卸载重装MyBATis插件(无需多言)二、检查.XML文件与.Java(该文件后缀Idea可能会隐藏

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转