From 366c7b48937025697f2829a6e323a567df0cb5c5 Mon Sep 17 00:00:00 2001 From: sunshine7058 <2564255161@qq.com> Date: Mon, 29 Apr 2024 22:30:37 +0800 Subject: [PATCH] =?UTF-8?q?fix():=E4=BD=BF=E7=94=A8=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E7=BC=96=E6=8E=92=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE=E5=90=8C?= =?UTF-8?q?=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DataSourceServiceImpl.java | 126 ++++++++++-------- 1 file changed, 69 insertions(+), 57 deletions(-) diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java index 0da65eb..ce5594b 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java @@ -26,9 +26,11 @@ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; +import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -56,8 +58,9 @@ public class DataSourceServiceImpl extends ServiceImpl() {{ - eq(AssetDataSource::getId, dataSource.getId()); - }}); + AssetDataSource assetDataSourceOne = assetDataSourceService.getOne(new LambdaQueryWrapper<>() {{ + eq(AssetDataSource::getId, dataSource.getId()); + }}); // 如果存在 删除 if (StringUtils.isNotNull(assetDataSourceOne)) { List childrenList = childrenService.list(new LambdaQueryWrapper<>() {{ eq(Children::getAssetId, assetDataSourceOne.getId()); }}); - // 同步表结构 - childrenList.forEach(children -> { - tableDataService.remove(new LambdaQueryWrapper<>() {{ - eq(TableData::getChildrenId, children.getId()); - }}); - }); + childrenList.forEach(children -> { + tableDataService.remove(new LambdaQueryWrapper<>() {{ + eq(TableData::getChildrenId, children.getId()); + }}); + }); childrenService.remove(new LambdaQueryWrapper<>() {{ eq(Children::getAssetId, assetDataSourceOne.getId()); }}); assetDataSourceService.removeById(assetDataSourceOne.getId()); - } - + } AssetDataSource assetDataSource = AssetDataSource.builder() .id((long) Math.toIntExact(dataSource.getId())) @@ -184,13 +186,18 @@ public class DataSourceServiceImpl extends ServiceImpl childrenList = childrenService.list(); - // 同步表结构 - childrenList.forEach(children -> { - addTableData(assetDataSource, children.getName()); - }); + + CompletableFuture future = CompletableFuture.supplyAsync(() -> { + // 同步数据库结构 + List childrenList = getChildrenList(assetDataSource); + + // 同步表结构 + childrenList.forEach(children -> { + addTableData(assetDataSource, children.getName()); + }); + return Result.success(); + },executor); + return Result.success(); } @@ -208,7 +215,9 @@ public class DataSourceServiceImpl extends ServiceImpl getChildrenList(AssetDataSource assetDataSource) { + + List childrenList = new ArrayList<>(); //查询数据源对象 DataSource dataSource = this.getOne(new LambdaQueryWrapper() {{ eq(DataSource::getName, assetDataSource.getName()); @@ -226,10 +235,9 @@ public class DataSourceServiceImpl extends ServiceImpl childrenList = childrenService.list(new LambdaQueryWrapper() {{ - eq(Children::getAssetId, assetDataSource.getId()); - }}); - sql = "select TABLE_NAME,TABLE_COMMENT from INFORMATION_SCHEMA.Tables where table_schema = " + "'" + dataSource.getDatabaseName() + "'"; + + sql = "select TABLE_NAME,TABLE_COMMENT from INFORMATION_SCHEMA.Tables where table_schema = " + "'" + + dataSource.getDatabaseName() + "'"; } else if ("PostgreSql".equals(dataSource.getDataType())) { sql = "select tb.table_name AS TABLE_NAME, d.description AS TABLE_COMMENT\n" + "from information_schema.tables tb\n" + @@ -260,7 +268,7 @@ public class DataSourceServiceImpl extends ServiceImpl childrenList = childrenService.list(new LambdaQueryWrapper<>() {{ + childrenList = childrenService.list(new LambdaQueryWrapper<>() {{ eq(Children::getAssetId, assetDataSource.getId()); }}); try { @@ -274,46 +282,47 @@ public class DataSourceServiceImpl extends ServiceImpl() {{ + eq(Children::getAssetId, assetDataSource.getId()); + }}); + return childrenList; } - public void addTableData(AssetDataSource assetDataSource, String tableName) { // if (version == 1){ - DataSource dataSource = this.getOne(new LambdaQueryWrapper<>() {{ - eq(DataSource::getName, assetDataSource.getName()); - eq(DataSource::getDatabaseName, assetDataSource.getDatabaseName()); - }}); - Children children = childrenService.getOne(new LambdaQueryWrapper<>() {{ - eq(Children::getAssetId, assetDataSource.getId()); - eq(Children::getName, tableName); - }}); - // 获取数据类型对象 - DatabaseType dataType = databaseTypeService.getOne(new LambdaQueryWrapper<>() { - { - eq(DatabaseType::getDatabaseName, dataSource.getDataType()); - } - }); - List tableDataList = tableDataService.list(new LambdaQueryWrapper<>() {{ - eq(TableData::getChildrenId, children.getId()); - }}); + DataSource dataSource = this.getOne(new LambdaQueryWrapper<>() {{ + eq(DataSource::getName, assetDataSource.getName()); + eq(DataSource::getDatabaseName, assetDataSource.getDatabaseName()); + }}); + Children children = childrenService.getOne(new LambdaQueryWrapper<>() {{ + eq(Children::getAssetId, assetDataSource.getId()); + eq(Children::getName, tableName); + }}); + // 获取数据类型对象 + DatabaseType dataType = databaseTypeService.getOne(new LambdaQueryWrapper<>() { + { + eq(DatabaseType::getDatabaseName, dataSource.getDataType()); + } + }); + List tableDataList = tableDataService.list(new LambdaQueryWrapper<>() {{ + eq(TableData::getChildrenId, children.getId()); + }}); - String jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + "/" + dataSource.getDatabaseName() + "?" + dataSource.getConnectionParam(); + String jdbcUrl = + dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + "/" + dataSource.getDatabaseName() + + "?" + dataSource.getConnectionParam(); Connection connection = null; try { Class.forName(dataType.getDriverManager()); @@ -323,8 +332,10 @@ public class DataSourceServiceImpl extends ServiceImpl