mysql迁移表结构不覆盖数据_数据源管理动态权限校验,表结构和数据迁移流程...
mysql迁移表结构不覆盖数据_数据源管理动态权限校验,表结汽车促销活动方案
构和数据迁移流程...
⼀、数据同步简介
1、场景描述
如果经常接触数据开发,会有这样⼀个场景,服务A提供⼀个数据源,假设称为动态数据源A,需要读取该数据源下的数据;服务B提供⼀个数据源,假设称为动态数据源B,需要写⼊数据到该数据源。这个场景通常描述为数据同步,或者数据搬运。
2、基本流程
基于上述流程图,整体步骤如下:
测试多个数据源是否连接成功,并动态管理;
判断数据源提供的账号是否有操作权限,例如读写;
读取数据源A的表结构,在数据源B创建表;
数据读取或者分页读取,写⼊数据源B中;
在不知道表结构情况下,还需要读取表结构,⽣成SQL;
3、JDBC基础API
Statement
Java中JDBC下执⾏数据库操作的⼀个重要接⼝,在已经建⽴数据库连接的基础上,向数据库发送要执⾏的SQL语句。
PreparedStatement
继承Statement接⼝,且实现SQL预编译,可以提⾼批量处理效率。常应⽤于批量数据写⼊场景。
ResultSet
存储JDBC查询结果集的对象,ResultSet接⼝提供从当前⾏检索列值的⽅法。
⼆、基础⼯具封装
1、数据源管理
提供⼀个数据源管理的Factory,当前场景下主要管理⼀个读库即数据源A,和⼀个写库即数据源B,数据源连接验证通过,放⼊容器中。
@Componentpublic class ConnectionFactory {    private volatile Map connectionMap = new HashMap<>();    @Resource    private JdbcConfig jdbcConfig
坐月子菜谱2、动态SQL拼接
基础SQL管理
王牌对王牌更新时间主要提供SQL的基础模板,例如全表查,分页查,表结构查询。
public class BaseSql {    public static String READ_SQL = "SELECT * FROM %s LIMIT 1";    public s
tatic String WRITE_SQL = "INSERT INTO %s (SELECT
鸽子怎么炖汤好喝又营养
SQL参数拼接
根据SQL模板中缺失的参数,进⾏动态补全,⽣成完成SQL语句。
public class BuildSql {    /**    * 读权限SQL    */    public static String buildReadSql(String table) {        String readSql = null ;        if (StringUtils.isNotEmpty(table)){
三、业务化流程
1、基础鉴权
2020鼠年福字图片读库尝试⼀次单条数据读取,写库尝试⼀次不成⽴条件的写⼊,如果没有权限,会抛出相应异常。
@RestControllerpublic class CheckController {    @Resource    private ConnectionFactory connectionFactory ;    // MySQLSyntaxErrorException: SELECT
2、同步表结构
这⾥执⾏最简单操作,把读库表创建语句查询出来,丢到写库中执⾏。
@RestControllerpublic class StructController {    @Resource    private ConnectionFactory connectionFactory ;    @GetMapping("/syncStruct")    public Strin
3、同步表数据
翡翠和玉有什么区别概念是什么读库的表数据读取,批量放⼊写库中。这⾥特别说⼀个⽅法:statement.setObject();在不知道参数个数和类型时,⾃动适配数据类型。
@RestControllerpublic class DataSyncController {    @Resource    private ConnectionFactory connectionFactory ;    @GetMapping("/dataSync")    public L
4、分页查询
提供⼀个分页查询⼯具,在数据量⼤的情况下不能⼀次性读取⼤量的数据,避免资源占⽤过⾼。
public class PageUtilEntity {    /**    * 分页⽣成⽅法    */    public static PageHelperEntity pageResult (int total, int pageSize,int currentPage, List dataList){        Pag 四、最后总结
很多复杂度偏⾼的业务,越是需要借助基础API解决,因为复杂度⾼,不容易抽象化统⼀封装,如果数据同步这块业务,可以适配多种数据
库,完全可以独⽴封装为中间件,开源项⽬中关于多⽅数据同步或计算的中间件也有好多,可以⾃⾏了解下,增长眼界开阔思路。
推荐相关阅读:
数据源管理 | 基于JDBC模式,适配和管理动态数据源
数据源管理 | 主从库动态路由,AOP模式读写分离

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。