增加主机信息功能

This commit is contained in:
2026-04-19 22:27:27 +08:00
parent d05108888a
commit 76b09ed6b2
5 changed files with 58 additions and 23 deletions

View File

@@ -0,0 +1,22 @@
package com.jeesite.modules.apps.Module.Dict;
import lombok.Data;
import java.io.Serializable;
@Data
public class DataSource implements Serializable {
private String sourceId; // 主键ID
private String sourceName; // 连接名称
private String dbName; // 数据库名称
public DataSource() {
}
public DataSource(String sourceId, String sourceName, String dbName) {
this.sourceId = sourceId;
this.sourceName = sourceName;
this.dbName = dbName;
}
}

View File

@@ -9,7 +9,6 @@ import java.math.BigDecimal;
public class DataTable implements Serializable { public class DataTable implements Serializable {
private String createTime; // 创建时间 private String createTime; // 创建时间
private String tableId; // 表ID
private String sourceId; // 数据源ID private String sourceId; // 数据源ID
private String tableName; // 数据表名 private String tableName; // 数据表名
private String tableComment; // 表注释 private String tableComment; // 表注释

View File

@@ -10,7 +10,6 @@ import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.sql.*; import java.sql.*;
import java.util.*; import java.util.*;
import java.util.Date;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -28,14 +27,14 @@ public class MysqlUtils {
/** /**
* 封装获取MySQL数据库连接 * 封装获取MySQL数据库连接
*/ */
private static Connection getConnection(String ip, Integer port, String username, String password) throws Exception { public static Connection getConnection(MyDataSource dbConfig) throws Exception {
String driver = "com.mysql.cj.jdbc.Driver"; String driver = "com.mysql.cj.jdbc.Driver";
String jdbcUrl = String.format( String jdbcUrl = String.format(
"jdbc:mysql://%s:%d/information_schema?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true", "jdbc:mysql://%s:%d/information_schema?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true",
ip, port dbConfig.getDbHost(), dbConfig.getDbPort()
); );
Class.forName(driver); // 加载驱动 Class.forName(driver); // 加载驱动
return DriverManager.getConnection(jdbcUrl, username, password); return DriverManager.getConnection(jdbcUrl, dbConfig.getUsername(), dbConfig.getPassword());
} }
/** /**
@@ -60,7 +59,7 @@ public class MysqlUtils {
/** /**
* 获取所有非系统数据库 * 获取所有非系统数据库
*/ */
private static List<String> getNonSystemDatabases(Connection conn) throws SQLException { public static List<String> getNonSystemDatabases(Connection conn) throws SQLException {
List<String> databases = new ArrayList<>(); List<String> databases = new ArrayList<>();
String sql = "SELECT SCHEMA_NAME FROM SCHEMATA WHERE SCHEMA_NAME NOT IN (" String sql = "SELECT SCHEMA_NAME FROM SCHEMATA WHERE SCHEMA_NAME NOT IN ("
+ String.join(",", Collections.nCopies(SYSTEM_DATABASES.size(), "?")) + ")"; + String.join(",", Collections.nCopies(SYSTEM_DATABASES.size(), "?")) + ")";
@@ -91,8 +90,6 @@ public class MysqlUtils {
try (ResultSet tableRs = tablePs.executeQuery()) { try (ResultSet tableRs = tablePs.executeQuery()) {
while (tableRs.next()) { while (tableRs.next()) {
DataTable tableInfo = buildDataTableInfo(tableRs, dbName); DataTable tableInfo = buildDataTableInfo(tableRs, dbName);
List<DataColumn> fields = getFieldsByTable(conn, dbName, tableInfo.getTableName());
fields.forEach(field -> field.setTableId(tableInfo.getTableId()));
tableInfos.add(tableInfo); tableInfos.add(tableInfo);
} }
} }
@@ -105,21 +102,16 @@ public class MysqlUtils {
*/ */
private static DataTable buildDataTableInfo(ResultSet tableRs, String dbName) throws SQLException { private static DataTable buildDataTableInfo(ResultSet tableRs, String dbName) throws SQLException {
DataTable dataTable = new DataTable(); DataTable dataTable = new DataTable();
String runTime = DateUtils.getCurrentDateTime();
String createDate = tableRs.getString("CREATE_TIME");
String updateDate = tableRs.getString("UPDATE_TIME");
long dataLength = tableRs.getLong("DATA_LENGTH"); long dataLength = tableRs.getLong("DATA_LENGTH");
long indexLength = tableRs.getLong("INDEX_LENGTH"); long indexLength = tableRs.getLong("INDEX_LENGTH");
BigDecimal tableSize = BigDecimal.valueOf((dataLength + indexLength) / 1024.0 / 1024.0) BigDecimal tableSize = BigDecimal.valueOf((dataLength + indexLength) / 1024.0 / 1024.0)
.setScale(2, RoundingMode.HALF_UP); .setScale(2, RoundingMode.HALF_UP);
dataTable.setTableId(KeyUtil.ObjKey(32, 0));
dataTable.setTableRows(tableRs.getLong("TABLE_ROWS")); dataTable.setTableRows(tableRs.getLong("TABLE_ROWS"));
dataTable.setTableName(tableRs.getString("TABLE_NAME")); dataTable.setTableName(tableRs.getString("TABLE_NAME"));
dataTable.setTableComment(tableRs.getString("TABLE_COMMENT")); dataTable.setTableComment(tableRs.getString("TABLE_COMMENT"));
dataTable.setTableSize(tableSize); dataTable.setTableSize(tableSize);
dataTable.setDataSource(dbName); dataTable.setDataSource(dbName);
dataTable.setCreateTime(createDate != null ? createDate : runTime);
return dataTable; return dataTable;
} }
@@ -186,7 +178,7 @@ public class MysqlUtils {
public static List<TableTree> getTableTrees(MyDataSource dbConfig) { public static List<TableTree> getTableTrees(MyDataSource dbConfig) {
List<TableTree> tableTrees = new ArrayList<>(); List<TableTree> tableTrees = new ArrayList<>();
try { try {
Connection conn = getConnection(dbConfig.getDbHost(), dbConfig.getDbPort(), dbConfig.getUsername(), dbConfig.getPassword()); Connection conn = getConnection(dbConfig);
Map<String, List<DataTable>> schemaInfo = MysqlUtils.getMysqlSchemaInfo(conn); Map<String, List<DataTable>> schemaInfo = MysqlUtils.getMysqlSchemaInfo(conn);
for (Map.Entry<String, List<DataTable>> entry : schemaInfo.entrySet()) { for (Map.Entry<String, List<DataTable>> entry : schemaInfo.entrySet()) {
for (DataTable dataTable : entry.getValue()) { for (DataTable dataTable : entry.getValue()) {

View File

@@ -0,0 +1,31 @@
package com.jeesite.modules.apps.web.mysql;
import com.jeesite.modules.apps.Module.Dict.DataSource;
import com.jeesite.modules.apps.utils.MysqlUtils;
import com.jeesite.modules.biz.entity.MyDataSource;
import com.jeesite.modules.biz.service.MyDataSourceService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
@RequestMapping(value = "${adminPath}/mysql/myDataSource")
public class DataSourceController {
@Resource
private MyDataSourceService myDataSourceService;
@RequestMapping(value = {"listAll", ""})
public List<DataSource> listAll(MyDataSource myDataSource) throws Exception {
List<DataSource> sourceList = new ArrayList<>();
MyDataSource source = myDataSourceService.get(myDataSource);
Connection conn = MysqlUtils.getConnection(source);
List<String> dataList = MysqlUtils.getNonSystemDatabases(conn);
for (String data : dataList) {
sourceList.add(new DataSource(source.getSourceId(), source.getSourceName(), data));
}
return sourceList;
}
}

View File

@@ -101,15 +101,6 @@
maxlength: 500, maxlength: 500,
}, },
}, },
{
label: t('连接参数'),
field: 'params',
component: 'Input',
componentProps: {
maxlength: 500,
},
colProps: { md: 24, lg: 24 },
},
{ {
label: t('备注说明'), label: t('备注说明'),
field: 'remark', field: 'remark',