09051901:对这个资产展示使用线程池的方法去做,第二次优化代码
parent
25ea324d30
commit
08453fdbd2
|
@ -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<DataValueMapper, DataValue> 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<DataValueMapper, DataValue
|
|||
// mysqlPool.closeConn();
|
||||
// return list;
|
||||
// }
|
||||
private static final int THREAD_POOL_SIZE = 10;
|
||||
private static final ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
|
||||
@Override
|
||||
public List<DataValue> 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<DataValue> 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<DataValue> 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<DataValue> 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<DataValue> 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<DataValue> 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<DataValue> findTableValueByTableName(Long basicId, String tableName)
|
|||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public List<DataValue> 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<DataValue> 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<Integer, String> 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<Future<DataValue>> 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<DataValue> 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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue