mirror of
https://gitee.com/dromara/dbswitch.git
synced 2025-09-23 12:44:15 +00:00
v1.6.16:修复issue I5X9ED,整库同步时同步源端新增的表
This commit is contained in:
@@ -226,9 +226,6 @@ public class MigrationHandler implements Supplier<Long> {
|
|||||||
|
|
||||||
JdbcTemplate targetJdbcTemplate = new JdbcTemplate(targetDataSource);
|
JdbcTemplate targetJdbcTemplate = new JdbcTemplate(targetDataSource);
|
||||||
for (String sql : sqlCreateTable) {
|
for (String sql : sqlCreateTable) {
|
||||||
if (interrupted) {
|
|
||||||
throw new RuntimeException("task is interrupted");
|
|
||||||
}
|
|
||||||
targetJdbcTemplate.execute(sql);
|
targetJdbcTemplate.execute(sql);
|
||||||
log.info("Execute SQL: \n{}", sql);
|
log.info("Execute SQL: \n{}", sql);
|
||||||
}
|
}
|
||||||
@@ -255,11 +252,43 @@ public class MigrationHandler implements Supplier<Long> {
|
|||||||
throw new RuntimeException("task is interrupted");
|
throw new RuntimeException("task is interrupted");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IMetaDataByDatasourceService metaDataByDatasourceService =
|
||||||
|
new MetaDataByDataSourceServiceImpl(targetDataSource, targetProductType);
|
||||||
|
List<String> targetTableNames = metaDataByDatasourceService
|
||||||
|
.queryTableList(targetSchemaName)
|
||||||
|
.stream().map(TableDescription::getTableName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (!targetTableNames.contains(targetSchemaName)) {
|
||||||
|
// 当目标端不存在该表时,则生成建表语句并创建
|
||||||
|
List<String> 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引擎;
|
// 判断是否具备变化量同步的条件:(1)两端表结构一致,且都有一样的主键字段;(2)MySQL使用Innodb引擎;
|
||||||
if (properties.getTarget().getChangeDataSync()) {
|
if (properties.getTarget().getChangeDataSync()) {
|
||||||
// 根据主键情况判断同步的方式:增量同步或覆盖同步
|
// 根据主键情况判断同步的方式:增量同步或覆盖同步
|
||||||
IMetaDataByDatasourceService metaDataByDatasourceService =
|
|
||||||
new MetaDataByDataSourceServiceImpl(targetDataSource, targetProductType);
|
|
||||||
List<String> dbTargetPks = metaDataByDatasourceService.queryTablePrimaryKeys(
|
List<String> dbTargetPks = metaDataByDatasourceService.queryTablePrimaryKeys(
|
||||||
targetSchemaName, targetTableName);
|
targetSchemaName, targetTableName);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user