From f7bf8f134e870c9428e492cb06f45377086e394c Mon Sep 17 00:00:00 2001 From: inrgihc Date: Mon, 24 Oct 2022 22:14:20 +0800 Subject: [PATCH] =?UTF-8?q?v1.6.16:=E4=BF=AE=E5=A4=8Dissue=20I5X9ED,?= =?UTF-8?q?=E6=95=B4=E5=BA=93=E5=90=8C=E6=AD=A5=E6=97=B6=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=BA=90=E7=AB=AF=E6=96=B0=E5=A2=9E=E7=9A=84=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/handler/MigrationHandler.java | 39 ++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/dbswitch-data/src/main/java/com/gitee/dbswitch/data/handler/MigrationHandler.java b/dbswitch-data/src/main/java/com/gitee/dbswitch/data/handler/MigrationHandler.java index 3af2e4c5..5b2ea104 100644 --- a/dbswitch-data/src/main/java/com/gitee/dbswitch/data/handler/MigrationHandler.java +++ b/dbswitch-data/src/main/java/com/gitee/dbswitch/data/handler/MigrationHandler.java @@ -226,9 +226,6 @@ public class MigrationHandler implements Supplier { JdbcTemplate targetJdbcTemplate = new JdbcTemplate(targetDataSource); for (String sql : sqlCreateTable) { - if (interrupted) { - throw new RuntimeException("task is interrupted"); - } targetJdbcTemplate.execute(sql); log.info("Execute SQL: \n{}", sql); } @@ -255,11 +252,43 @@ public class MigrationHandler implements Supplier { throw new RuntimeException("task is interrupted"); } + IMetaDataByDatasourceService metaDataByDatasourceService = + new MetaDataByDataSourceServiceImpl(targetDataSource, targetProductType); + List targetTableNames = metaDataByDatasourceService + .queryTableList(targetSchemaName) + .stream().map(TableDescription::getTableName) + .collect(Collectors.toList()); + + if (!targetTableNames.contains(targetSchemaName)) { + // 当目标端不存在该表时,则生成建表语句并创建 + List sqlCreateTable = sourceMetaDataService.getDDLCreateTableSQL( + targetProductType, + targetColumnDescriptions.stream() + .filter(column -> StringUtils.hasLength(column.getFieldName())) + .collect(Collectors.toList()), + targetPrimaryKeys, + targetSchemaName, + targetTableName, + sourceTableRemarks, + properties.getTarget().getCreateTableAutoIncrement() + ); + + JdbcTemplate targetJdbcTemplate = new JdbcTemplate(targetDataSource); + for (String sql : sqlCreateTable) { + targetJdbcTemplate.execute(sql); + log.info("Execute SQL: \n{}", sql); + } + + if (interrupted) { + throw new RuntimeException("task is interrupted"); + } + + return doFullCoverSynchronize(writer); + } + // 判断是否具备变化量同步的条件:(1)两端表结构一致,且都有一样的主键字段;(2)MySQL使用Innodb引擎; if (properties.getTarget().getChangeDataSync()) { // 根据主键情况判断同步的方式:增量同步或覆盖同步 - IMetaDataByDatasourceService metaDataByDatasourceService = - new MetaDataByDataSourceServiceImpl(targetDataSource, targetProductType); List dbTargetPks = metaDataByDatasourceService.queryTablePrimaryKeys( targetSchemaName, targetTableName);