diff --git a/muyu-source-server/src/main/java/com/muyu/source/service/Impl/DataValueServiceImpl.java b/muyu-source-server/src/main/java/com/muyu/source/service/Impl/DataValueServiceImpl.java index 499378c..c8504a2 100644 --- a/muyu-source-server/src/main/java/com/muyu/source/service/Impl/DataValueServiceImpl.java +++ b/muyu-source-server/src/main/java/com/muyu/source/service/Impl/DataValueServiceImpl.java @@ -16,7 +16,9 @@ import org.springframework.stereotype.Service; import java.sql.*; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -35,6 +37,9 @@ import static com.muyu.source.pool.config.BaseConfig.SELECTALL; @Service public class DataValueServiceImpl extends ServiceImpl implements DataValueService { + private static final int THREAD_POOL_SIZE = 10; + private static final ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE); + @Autowired private DataSourceService dataSourceService; @Override @@ -123,54 +128,53 @@ public class DataValueServiceImpl extends ServiceImpl findTableValueByTableName(Long basicId, String tableName) { - MysqlQuery mySqlQuery = new MysqlQuery(); - mySqlQuery.setDataSourceId(String.valueOf(basicId)); - DataSource etlDataScore = dataSourceService.getById(basicId); - MysqlPool mysqlPool = new MysqlPool(etlDataScore); - mysqlPool.init(); - Connection conn = mysqlPool.getConn(); - - List list = new ArrayList<>(); - - try { - PreparedStatement preparedStatement = conn.prepareStatement(SELECTALL + tableName); - ResultSet resultSet = preparedStatement.executeQuery(); - ResultSetMetaData metaData = resultSet.getMetaData(); - int columnCount = metaData.getColumnCount(); - - while (resultSet.next()) { - for (int i = 1; i <= columnCount; i++) { - final int index = i; - Future future = executorService.submit(() -> { - String columnTypeName = metaData.getColumnTypeName(index); - DatabaseMetaData metaDataColumns = conn.getMetaData(); - ResultSet columns = metaDataColumns.getColumns(null, null, metaData.getTableName(index), metaData.getColumnName(index)); - String remarks = null; - while (columns.next()) { - remarks = columns.getString("REMARKS"); - } - return DataValue.builder() - .key(metaData.getColumnName(index)) - .label(remarks) - .value(resultSet.getObject(index, DataType.convertType(columnTypeName))) - .type(DataType.convertTypeString(columnTypeName)) - .build(); - }); - list.add(future.get()); - } - } - } catch (SQLException | InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } finally { - mysqlPool.replease(conn); - mysqlPool.closeConn(); - } - return list; -} +// +//@Override +//public List findTableValueByTableName(Long basicId, String tableName) { +// MysqlQuery mySqlQuery = new MysqlQuery(); +// mySqlQuery.setDataSourceId(String.valueOf(basicId)); +// DataSource etlDataScore = dataSourceService.getById(basicId); +// MysqlPool mysqlPool = new MysqlPool(etlDataScore); +// mysqlPool.init(); +// Connection conn = mysqlPool.getConn(); +// +// List list = new ArrayList<>(); +// +// try { +// PreparedStatement preparedStatement = conn.prepareStatement(SELECTALL + tableName); +// ResultSet resultSet = preparedStatement.executeQuery(); +// ResultSetMetaData metaData = resultSet.getMetaData(); +// int columnCount = metaData.getColumnCount(); +// +// while (resultSet.next()) { +// for (int i = 1; i <= columnCount; i++) { +// final int index = i; +// Future future = executorService.submit(() -> { +// String columnTypeName = metaData.getColumnTypeName(index); +// DatabaseMetaData metaDataColumns = conn.getMetaData(); +// ResultSet columns = metaDataColumns.getColumns(null, null, metaData.getTableName(index), metaData.getColumnName(index)); +// String remarks = null; +// while (columns.next()) { +// remarks = columns.getString("REMARKS"); +// } +// return DataValue.builder() +// .key(metaData.getColumnName(index)) +// .label(remarks) +// .value(resultSet.getObject(index, DataType.convertType(columnTypeName))) +// .type(DataType.convertTypeString(columnTypeName)) +// .build(); +// }); +// list.add(future.get()); +// } +// } +// } catch (SQLException | InterruptedException | ExecutionException e) { +// throw new RuntimeException(e); +// } finally { +// mysqlPool.replease(conn); +// mysqlPool.closeConn(); +// } +// return list; +//} @Override public Integer addTableValue(DataValueModel dataValueModel) { @@ -187,4 +191,66 @@ public List findTableValueByTableName(Long basicId, String tableName) throw new RuntimeException(e); } } + @Override + public List findTableValueByTableName(Long basicId, String tableName) { + MysqlQuery mySqlQuery = new MysqlQuery(); + mySqlQuery.setDataSourceId(String.valueOf(basicId)); + DataSource etlDataScore = dataSourceService.getById(basicId); + MysqlPool mysqlPool = new MysqlPool(etlDataScore); + mysqlPool.init(); + Connection conn = mysqlPool.getConn(); + + List list = new ArrayList<>(); + ExecutorService threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + + try { + PreparedStatement preparedStatement = conn.prepareStatement(SELECTALL + tableName); + ResultSet resultSet = preparedStatement.executeQuery(); + ResultSetMetaData metaData = resultSet.getMetaData(); + int columnCount = metaData.getColumnCount(); + + // Pre-fetch column details + Map columnRemarks = new HashMap<>(); + DatabaseMetaData metaDataColumns = conn.getMetaData(); + for (int i = 1; i <= columnCount; i++) { + ResultSet columns = metaDataColumns.getColumns(null, null, metaData.getTableName(i), metaData.getColumnName(i)); + if (columns.next()) { + columnRemarks.put(i, columns.getString("REMARKS")); + } + } + + List> futures = new ArrayList<>(); + + while (resultSet.next()) { + for (int i = 1; i <= columnCount; i++) { + final int index = i; + futures.add(threadPool.submit(() -> { + String columnTypeName = metaData.getColumnTypeName(index); + return DataValue.builder() + .key(metaData.getColumnName(index)) + .label(columnRemarks.getOrDefault(index, "")) + .value(resultSet.getObject(index, DataType.convertType(columnTypeName))) + .type(DataType.convertTypeString(columnTypeName)) + .build(); + })); + } + } + + // Collect results + for (Future future : futures) { + try { + list.add(future.get()); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + threadPool.shutdown(); + mysqlPool.replease(conn); + mysqlPool.closeConn(); + } + return list; + } }