IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 搭建大型分布式服务(三十五)十分钟搭SpringBoot积木 - DB数据迁移 -> 正文阅读

[Java知识库]搭建大型分布式服务(三十五)十分钟搭SpringBoot积木 - DB数据迁移

系列文章目录



前言

玩转SpringBoot,像搭积木一样简单。在业务系统升级时,数据迁移是必不可少的一环。数据迁移又分离线和在线的方式,即存量数据和增量数据在平滑升级中融合。常用的DB数据迁移方式也有很多,文件拷贝、mysql dump、主从同步、canal、DataX、愚公、DTS等等,但这些方式往往是以镜像方式迁移,虽然有些工具支持数据类型或者字段名称转换,但支持不了复杂的转换,例如json转换等。本文将介绍如何封装支持复杂类型的数据迁移工具。
在这里插入图片描述


一、本文要点

前面的文章,介绍了基于Jolt如何实现业务型的ETL工具,本文将介绍这款工具的实际应用场景,如何快速将DB表数据迁移到另外一个DB表。系列文章完整目录

  • JSON to JSON
  • JSON 结构转换
  • Kafka 转存到 ES
  • Kafka 转存到 DB
  • DB 数据转KAFKA消息
  • DB 数据转存ES
  • 低代码平台
  • SpringBoot积木

二、开发环境

  • jdk 1.8
  • maven 3.6.2
  • springboot 2.4.3
  • Jolt 0.1.5
  • mysql 5.6
  • es 6.8.2
  • idea 2020

三、容器模式

1、新建容器
使用制作好的etl镜像,创建工作负载,参考文章:
《搭建大型分布式服务(二十五)如何将应用部署到TKE容器集群?》
《搭建大型分布式服务(二十七)如何通过Coding流水线CI/CD将SpringBoot服务部署到TKE容器集群》
在这里插入图片描述
其中SPRING_EXT变量可以自定义profile的值,指定加载applicationn-xxx.properties文件的配置。
参考:《搭建大型分布式服务(三)SpringBoot多环境配置》

2、配置同步参数
(1)可以直接在Apollo配置中心直接修改profile对应环境的application.properties文件配置信息。
参考:《搭建大型分布式服务(十七)SpringBoot 配置托管到Apollo》
(2)也可以直接利用SpringBoot配置文件加载顺序原因,将文件application-xxx.properties挂载到容器config/application-xxx.properties目录,覆盖容器目录中的文件。


################### 共同 ###################
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource

################### 输入 ###################
spring.jolt.input.type=db
spring.jolt.input.db.objectId=xxx  ## 可以作为入参,选择某类数据
spring.jolt.input.db.range-sql=select min(id) startIndex, max(id) endIndex from 表 where 1=1 and  objectId = ? 
spring.jolt.input.db.select-sql=select * from 表 where 1=1 and objectId = ? and id >= ? and id < ? 
spring.jolt.input.db.hikari.jdbc-url=jdbc:mysql://127.0.0.13306/xxx?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=GMT%2B8
spring.jolt.input.db.hikari.username=root
spring.jolt.input.db.hikari.password=
spring.jolt.input.db.hikari.minimum-idle=1
spring.jolt.input.db.hikari.maximum-pool-size=15
spring.jolt.input.db.hikari.auto-commit=true
spring.jolt.input.db.hikari.idle-timeout=30000
spring.jolt.input.db.hikari.pool-name=primary_pool
spring.jolt.input.db.hikari.max-lifetime=1800000
spring.jolt.input.db.hikari.connection-timeout=30001
spring.jolt.input.db.hikari.connection-test-query=SELECT 1 FROM DUAL
spring.jolt.input.db.hikari.connection-init-sql=set names utf8mb4

################### 转换 ###################
spring.jolt.spec.value=[{"operation":"shift","spec":{"id":"ID"}}]  ## mysql行数据转换逻辑

################### 输出 ###################
spring.jolt.output.db.enabled=true
spring.jolt.output.db.hikari.jdbc-url=jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=GMT%2B8
spring.jolt.output.db.hikari.username=root
spring.jolt.output.db.hikari.password=
spring.jolt.output.db.hikari.minimum-idle=1
spring.jolt.output.db.hikari.maximum-pool-size=15
spring.jolt.output.db.hikari.auto-commit=true
spring.jolt.output.db.hikari.idle-timeout=30000
spring.jolt.output.db.hikari.pool-name=primary_pool
spring.jolt.output.db.hikari.max-lifetime=1800000
spring.jolt.output.db.hikari.connection-timeout=30001
spring.jolt.output.db.hikari.connection-test-query=SELECT 1 FROM DUAL
spring.jolt.output.db.hikari.connection-init-sql=set names utf8mb4
spring.jolt.output.db.table-name=新表名
spring.jolt.output.db.update-enabled=false ## 如果目标数据已存在,是否更新
spring.jolt.output.db.ignore-sinker-error=true ## 是否忽略错误

## 二选一

# 自定义语句
spring.jolt.output.db.custom-sql=insert into person (stuName, stuAge, stuSex, address) values(#{stuName}, #{stuAge}, #{stuSex}, #{address})  ## 支持mybatis语法
# 自动生成语句
spring.jolt.output.db.table-name=Person  ## 新表名
spring.jolt.output.db.include-fields=stuAge,stuSex  ## 忽略更新哪些字段
spring.jolt.output.db.update-enabled=true  ## 是否支持 on duplicate key update

################### 监控 ###################
spring.jolt.monitor.debug-field-name[0]=ID  ## 日志里打印那一列
spring.jolt.monitor.debug-pair=ID:1523655022708244503 ## 符合这个条件才打印

spring.jolt.spec.value 是基于jolt转换逻辑的核心配置项,在这可以不用写任何java代码就可以实现db数据迁移打新db表了。

3、完成配置后,启动容器,db数据迁移任务就已经正常运行。其中spring.jolt.input.db.range-sql配置控制扫表的条件,spring.jolt.input.db.select-sql控制从db里打捞数据的格式。

四、小结

至此,简单几步,本文就实现了db数据按任意格式迁移到新db表了。下一篇《搭建大型分布式服务(三十五)基于JOLT的ETL工具 - DB数据迁移

加我加群一起交流学习!更多干货下载、项目源码和大厂内推等着你

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:38:23  更:2022-07-20 18:39:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:40:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码