搭建大型分布式服务(三十一)SpringBoot积木-Jolt低代码玩法

系列文章目录



前言

随着需求演进迭代,经常需要把上游进来的一份数据,按照不同数据格式(字段打平、名称修改、类型转换、结构调整、数据过滤)转存或者分发到各应用。而在其中,我们耗费了不少的人力在json to json和sink to where的编码上。


一、本文要点

前面的文章,介绍了Docker搭建各种环境、SpringBoot整合各种中间件、如何把应用部署到云容器,本文开始一个新系列。系列文章完整目录

相信大部分业务都有这样的场景,消费一种MQ消息->转换为另外一种数据格式->转存到DB/REDIS/ES/COS或者推送到另外一个MQ,俗称数据搬运。但由于历史技术债务或者多方团队合作的等原因,项目对接的业务使用的数据格式存在很大差异,需要做不同程度的数据转换,例如:
在这里插入图片描述

也就是说,我们需要具备以下数据格式转换能力来适配各业务诉求。

  • 字段名称修改
  • 字段打平或展开
  • 字段类型和值转换
  • 字段结构转换
  • 字段值过滤

很明显,如果硬编码去做这种数据搬运是乏味而低效的,我们需要一款工具去提效,它需要具备以下核心能力。

  • 动态配置数据输入源
  • 通过DSL描述JSON->JSON的转换逻辑(非硬编码,动态修改)
  • 动态配置输出目标

通过调研发现,云产品SCF+CKAFKA实现的消息转储已经很接近我们的诉求,但它提供的功能仅支持原格式转储,其它格式则需要自行编码开发,跟我们的目标不符。输入和输出的动态配置能力相对比较简单,可以通过封装组件来实现,核心的要素还是在于数据格式的转换。经过一轮Google,发现JOLT比较符合我们组当前的业务场景。
在这里插入图片描述

  • JSON to JSON
  • JSON 结构转换
  • Kafka 转存到 ES
  • Kafka 转存到 DB
  • DB 数据转KAFKA消息
  • DB 数据转存ES

二、开发环境

  • jdk 1.8
  • maven 3.6.2
  • springboot 2.4.3
  • Jolt 0.1.5
  • idea 2020

三、Jolt 是什么?

1、JOLT是什么?

JSON to JSON transformation library written in Java where the “specification” for the transform is itself a JSON document.

    1. Transforming JSON data from ElasticSearch, MongoDb, Cassandra, etc before sending it off to the world
    1. Extracting data from a large JSON documents for your own consumption

Jolt 实则上是一个类库,在当今大数据场景主流的ETL pipeline 工具如NIFI和 StreamSets都支持Jolt作为Json转换插件,还有我们熟悉的camel等,它支持我们使用特定的DSL来进行JSON to JSON转换。

2、JOLT支持哪些转换?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Spring Boot 中整合 Jolt,你可以按照以下步骤进行操作: 1. 添依赖:在你的 Spring Boot 项目的 pom.xml 文件中,添 Jolt 的依赖。你可以在 Maven 中央仓库中找到最新的 Jolt 依赖版本。例如: ```xml <dependency> <groupId>com.bazaarvoice.jolt</groupId> <artifactId>jolt</artifactId> <version>0.4.0</version> </dependency> ``` 2. 创建 Jolt 转换规则:在你的项目中创建一个 JSON 文件,定义 Jolt 转换规则。例如,创建一个名为 `jolt-spec.json` 的文件,内容如下: ```json [ { "operation": "shift", "spec": { "name": "firstName", "age": "age" } } ] ``` 这个规则将把输入 JSON 中的 "name" 字段映射到输出 JSON 的 "firstName" 字段,将 "age" 字段映射到输出 JSON 的 "age" 字段。 3. 创建 Jolt 转换类:在你的 Spring Boot 项目中创建一个类,用于载和应用 Jolt 转换规则。例如,创建一个名为 `JoltTransformer.java` 的类: ```java import com.bazaarvoice.jolt.Chainr; import com.bazaarvoice.jolt.JsonUtils; import java.util.List; public class JoltTransformer { private Chainr chainr; public JoltTransformer() { List<Object> specs = JsonUtils.classpathToList("/jolt-spec.json"); chainr = Chainr.fromSpec(specs); } public Object transform(Object input) { return chainr.transform(input); } } ``` 这个类载了之前定义的 Jolt 转换规则,并提供了一个 `transform` 方法用于应用规则。 4. 使用 Jolt 转换:在你的 Spring Boot 项目中,使用 JoltTransformer 类来进行 JSON 数据转换。例如,创建一个名为 `JoltController.java` 的控制器类: ```java import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class JoltController { private JoltTransformer joltTransformer; public JoltController(JoltTransformer joltTransformer) { this.joltTransformer = joltTransformer; } @PostMapping("/transform") public Object transformJson(@RequestBody Object input) { return joltTransformer.transform(input); } } ``` 这个控制器类使用了 JoltTransformer 类进行 JSON 数据转换。当 POST 请求发送到 "/transform" 路径时,它会将请求体中的 JSON 数据应用 Jolt 转换规则,并返回转换后的结果。 5. 运行应用程序:启动你的 Spring Boot 应用程序,并访问 "/transform" 路径进行测试。你可以通过发送 JSON 数据的 POST 请求来测试转换功能。 以上是整合 Spring Boot 和 Jolt 的基本步骤,你可以根据自己的需求进行进一步的扩展和定制。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值