diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 5db292a..ee9f695 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -2,7 +2,13 @@
+
+
+
+
+
+
@@ -57,5 +63,6 @@
+
\ No newline at end of file
diff --git a/muyu-source-client/src/main/java/com/muyu/config/SourceClientConfig.java b/muyu-source-client/src/main/java/com/muyu/config/SourceClientConfig.java
index 0e2c2c1..4dac414 100644
--- a/muyu-source-client/src/main/java/com/muyu/config/SourceClientConfig.java
+++ b/muyu-source-client/src/main/java/com/muyu/config/SourceClientConfig.java
@@ -1,9 +1,12 @@
package com.muyu.config;
+import cn.hutool.core.math.Arrangement;
import com.muyu.common.core.domain.Result;
+import com.muyu.connection.DataSourceConfig;
import com.muyu.source.domain.Children;
import com.muyu.source.domain.DataSource;
import com.muyu.source.domain.DataType;
+import com.muyu.source.domain.model.DataModel;
import com.muyu.source.remote.RemoteChildrenService;
import com.muyu.source.remote.RemoteDataSourceService;
import com.muyu.source.remote.RemoteDataTypeService;
@@ -11,6 +14,9 @@ import jakarta.annotation.Resource;
import org.springframework.context.annotation.ComponentScan;
import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
/**
* @author Lenovo
@@ -22,48 +28,57 @@ import java.sql.*;
*/
@ComponentScan
public class SourceClientConfig {
- @Resource
- private RemoteDataTypeService remoteDataTypeService;
@Resource
private RemoteDataSourceService remoteDataSourceService;
@Resource
private RemoteChildrenService remoteChildrenService;
- public void getDataModel(Long id){
- //根据ID查询出数据源的数据
- Result dataSourceResult =remoteDataSourceService.getDataSource(id);
- DataSource dataSource = dataSourceResult.getData();
- //根据ID查询出数据库类型的数据
- Result dataTypeResult = remoteDataTypeService.getDataType(dataSource.getDataType());
- DataType dataType = dataTypeResult.getData();
- //根据ID查询出数据源的数据库结构的数据
- Result childrenResult =remoteChildrenService.getChildren(dataSource.getId());
+ public List> getDataModel(Long id) {
+ List> list = new ArrayList<>();
+ //根据ID查询出表结构的数据
+ Result childrenResult = remoteChildrenService.getChildren(id);
Children children = childrenResult.getData();
-
-
- try {
- Class.forName(dataType.getDriverManager());
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e);
+ //根据ID查询出数据源的数据
+ Result dataSourceResult = remoteDataSourceService.getDataSource(children.getAssetId());
+ DataSource dataSource = dataSourceResult.getData();
+ String sql = "";
+ if ("MySql".equals(dataSource.getDataType())) {
+ sql = "SELECT * FROM " + children.getName();
}
try {
- //获取连接对象 拼接数据库地址
- Connection connection = DriverManager.getConnection(dataType.getPrefix()+dataSource.getIp()+dataSource.getPort()
- +"//"+dataSource.getDatabaseName()+"?"+dataSource.getConnectionParam(),dataSource.getUserName(),dataSource.getPassword());
- //创建执行对象
- Statement statement = connection.createStatement();
- //拼接sql语句
- ResultSet resultSet = statement.executeQuery("SELECT * FROM" + children.getName());
- //处理返回结果
- while (resultSet.next()){
- System.out.println(resultSet.getString(1));
+ //调用连接池获取连接
+ Connection connection = DataSourceConfig.getDataSource(dataSource.getId());
+ PreparedStatement preparedStatement = connection.prepareStatement(sql);
+ ResultSet resultSet = preparedStatement.executeQuery();
+ ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+ while (resultSet.next()) {
+ List dataModels = new ArrayList<>();
+ for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+ //获取列名 字段名 key
+ String columnName = resultSetMetaData.getColumnName(i);
+ //获取字段的值 value
+ Object value = resultSet.getObject(columnName);
+ //获取列的类型 字段的类型 type
+ String columnTypeName = resultSetMetaData.getColumnTypeName(i);
+ //获取列的标题 label
+ String columnLabel = resultSetMetaData.getColumnLabel(i);
+ // java类型
+ String columnClassName = resultSetMetaData.getColumnClassName(i);
+ DataModel dataModel = DataModel.builder()
+ .key(columnName)
+ .label(columnLabel)
+ .type(columnTypeName)
+ .value(value)
+ .build();
+ dataModels.add(dataModel);
+ }
+ list.add(dataModels);
}
- //关闭资源
- resultSet.close();
- statement.close();
- connection.close();
+ //归还连接
+ DataSourceConfig.returnConnection(connection);
} catch (SQLException e) {
throw new RuntimeException(e);
}
+ return list;
}
}
diff --git a/muyu-source-client/src/main/java/com/muyu/config/SourceClientRunner.java b/muyu-source-client/src/main/java/com/muyu/config/SourceClientRunner.java
new file mode 100644
index 0000000..f624787
--- /dev/null
+++ b/muyu-source-client/src/main/java/com/muyu/config/SourceClientRunner.java
@@ -0,0 +1,45 @@
+package com.muyu.config;
+
+import com.muyu.common.core.domain.Result;
+import com.muyu.connection.DataSourceConfig;
+import com.muyu.source.domain.DataSource;
+import com.muyu.source.domain.DataType;
+import com.muyu.source.remote.RemoteChildrenService;
+import com.muyu.source.remote.RemoteDataSourceService;
+import com.muyu.source.remote.RemoteDataTypeService;
+import jakarta.annotation.Resource;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+/**
+ * @author Lenovo
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-08-23-9:45
+ * @ Version:1.0
+ * @ Description:初始化加载
+ */
+@Log4j2
+@Configuration
+public class SourceClientRunner implements ApplicationRunner {
+ @Resource
+ private RemoteDataSourceService remoteDataSourceService;
+ @Resource
+ private RemoteDataTypeService remoteDataTypeService;
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ Result> sourceResult = remoteDataSourceService.getDataSourceList();
+ log.info(sourceResult);
+ List sourceList = sourceResult.getData();
+ sourceList.stream().forEach(source -> {
+ Result dataTypeResult = remoteDataTypeService.getDataType(source.getDataType());
+ DataType dataType = dataTypeResult.getData();
+ DataSourceConfig.init(source, dataType);
+ });
+ }
+}
diff --git a/muyu-source-common/src/main/java/com/muyu/source/domain/model/DataModel.java b/muyu-source-common/src/main/java/com/muyu/source/domain/model/DataModel.java
new file mode 100644
index 0000000..5ea3231
--- /dev/null
+++ b/muyu-source-common/src/main/java/com/muyu/source/domain/model/DataModel.java
@@ -0,0 +1,39 @@
+package com.muyu.source.domain.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @author Lenovo
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-08-23-9:41
+ * @ Version:1.0
+ * @ Description:数据转换对象
+ */
+@Data
+@SuperBuilder
+@AllArgsConstructor
+@NoArgsConstructor
+public class DataModel {
+ /**
+ * 键
+ */
+ private String key;
+ /**
+ * 标签
+ */
+ private String label;
+ /**
+ * 类型
+ */
+ private String type;
+ /**
+ * 值
+ */
+ private Object value;
+
+
+}
diff --git a/muyu-source-remote/src/main/java/com/muyu/source/remote/RemoteDataSourceService.java b/muyu-source-remote/src/main/java/com/muyu/source/remote/RemoteDataSourceService.java
index 266ab05..036df48 100644
--- a/muyu-source-remote/src/main/java/com/muyu/source/remote/RemoteDataSourceService.java
+++ b/muyu-source-remote/src/main/java/com/muyu/source/remote/RemoteDataSourceService.java
@@ -8,6 +8,8 @@ import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
+import java.util.List;
+
/**
* @author Lenovo
* @ Tool:IntelliJ IDEA
@@ -23,4 +25,7 @@ public interface RemoteDataSourceService {
@GetMapping("/getDataSourceById/{id}")
Result getDataSource(@PathVariable Long id);
+ @GetMapping("/getDataSourceList")
+ Result> getDataSourceList();
+
}
diff --git a/muyu-source-remote/src/main/java/com/muyu/source/remote/factory/RemoteDataSourceFactory.java b/muyu-source-remote/src/main/java/com/muyu/source/remote/factory/RemoteDataSourceFactory.java
index 49ea8d1..19b5212 100644
--- a/muyu-source-remote/src/main/java/com/muyu/source/remote/factory/RemoteDataSourceFactory.java
+++ b/muyu-source-remote/src/main/java/com/muyu/source/remote/factory/RemoteDataSourceFactory.java
@@ -5,6 +5,8 @@ import com.muyu.source.domain.DataSource;
import com.muyu.source.remote.RemoteDataSourceService;
import org.springframework.cloud.openfeign.FallbackFactory;
+import java.util.List;
+
/**
* @author Lenovo
* @ Tool:IntelliJ IDEA
@@ -21,6 +23,11 @@ public class RemoteDataSourceFactory implements FallbackFactory getDataSource(Long id) {
return Result.error(cause.getMessage());
}
+
+ @Override
+ public Result> getDataSourceList() {
+ return Result.error(cause.getMessage());
+ }
};
}
}
diff --git a/muyu-source-server/src/main/java/com/muyu/source/controller/DataSourceController.java b/muyu-source-server/src/main/java/com/muyu/source/controller/DataSourceController.java
index 23ca26d..de3b7e4 100644
--- a/muyu-source-server/src/main/java/com/muyu/source/controller/DataSourceController.java
+++ b/muyu-source-server/src/main/java/com/muyu/source/controller/DataSourceController.java
@@ -1,5 +1,7 @@
package com.muyu.source.controller;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.dtflys.forest.springboot.annotation.ForestScannerRegister;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.poi.ExcelUtil;
@@ -45,6 +47,36 @@ public class DataSourceController extends BaseController {
@Autowired
private DataSourceService dataSourceService;
+ /**
+ * 测试连接
+ * @param dataSource 数据源
+ * @return 是否连接成功
+ */
+ @PostMapping("/test")
+ public Result testConnection(@RequestBody DataSource dataSource){
+ Boolean b =dataSourceService.testConnection(dataSource);
+ if(b){
+ dataSourceService.update(new LambdaUpdateWrapper<>() {{
+ set(DataSource::getIsInit, "Y");
+ eq(DataSource::getId, dataSource.getId());
+ }});
+ return Result.success(b,"连接成功");
+ }
+ return Result.error("连接失败");
+ }
+
+
+
+ /**
+ * 获取数据源列表
+ * @return 数据源列表
+ */
+ @GetMapping("/getDataSourceList")
+ public Result> getDataSourceList(){
+ List dataSourceList =dataSourceService.list();
+ return success(dataSourceList);
+ }
+
/**
* 查询数据源列表
*/
diff --git a/muyu-source-server/src/main/java/com/muyu/source/service/DataSourceService.java b/muyu-source-server/src/main/java/com/muyu/source/service/DataSourceService.java
index 812f1bb..69e8b24 100644
--- a/muyu-source-server/src/main/java/com/muyu/source/service/DataSourceService.java
+++ b/muyu-source-server/src/main/java/com/muyu/source/service/DataSourceService.java
@@ -39,5 +39,5 @@ public interface DataSourceService extends IService {
Boolean checkIdUnique(DataSource dataSource);
-
+ Boolean testConnection(DataSource dataSource);
}
diff --git a/muyu-source-server/src/main/java/com/muyu/source/service/DataTypeService.java b/muyu-source-server/src/main/java/com/muyu/source/service/DataTypeService.java
new file mode 100644
index 0000000..762944b
--- /dev/null
+++ b/muyu-source-server/src/main/java/com/muyu/source/service/DataTypeService.java
@@ -0,0 +1,14 @@
+package com.muyu.source.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.muyu.source.domain.DataType;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-08-23-18:59
+ * @ Version:1.0
+ * @ Description:数据库类型业务层
+ */
+public interface DataTypeService extends IService {
+}
diff --git a/muyu-source-server/src/main/java/com/muyu/source/service/Impl/DataSourceServiceImpl.java b/muyu-source-server/src/main/java/com/muyu/source/service/Impl/DataSourceServiceImpl.java
index 06c1a19..ce74a1d 100644
--- a/muyu-source-server/src/main/java/com/muyu/source/service/Impl/DataSourceServiceImpl.java
+++ b/muyu-source-server/src/main/java/com/muyu/source/service/Impl/DataSourceServiceImpl.java
@@ -5,11 +5,18 @@ import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.core.utils.StringUtils;
import com.muyu.source.domain.DataSource;
+import com.muyu.source.domain.DataType;
import com.muyu.source.mapper.DataSourceMapper;
import com.muyu.source.service.DataSourceService;
+import com.muyu.source.service.DataTypeService;
+import jakarta.annotation.Resource;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
+import java.util.concurrent.ExecutorService;
+
+import static java.util.concurrent.Executors.newFixedThreadPool;
/**
* @author Lenovo
@@ -22,6 +29,10 @@ import java.util.List;
@Service
public class DataSourceServiceImpl extends ServiceImpl implements DataSourceService {
+ @Resource
+ private DataTypeService dataTypeService;
+ private final ExecutorService executor = newFixedThreadPool(10);
+
/**
* 精确查询数据源
@@ -79,5 +90,45 @@ public class DataSourceServiceImpl extends ServiceImpl 0;
}
+ /**
+ * 测试连接
+ * @param dataSource 数据源
+ * @return 结果
+ */
+ @Override
+ public Boolean testConnection(DataSource dataSource) {
+ DataType dataType = dataTypeService.getOne(new LambdaQueryWrapper<>() {{
+ eq(DataType::getType, dataSource.getDataType());
+ }});
+ //
+ String jdbcUrl="";
+ boolean flag=false;
+ try{
+ //判空
+ if(dataType.getDriverManager()!=null && dataType.getPrefix()!=null){
+ if("MySql".equals(dataType.getType())){
+ //mysql拼接连接路径
+ jdbcUrl=dataType.getDriverManager()+dataType.getPrefix()+dataSource.getIp()+":"+dataSource.getPort()+"/"+dataSource.getDatabaseName()+"?"+dataSource.getConnectionParam();
+ }
+ flag=testConnection(dataType.getDriverManager(),jdbcUrl,dataSource.getUserName(),dataSource.getPassword());
+ }
+ return flag;
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return flag;
+ }
+
+ private boolean testConnection(String driverManager, String jdbcUrl, String userName, String password) {
+ if(StringUtils.isNotEmpty(driverManager) && StringUtils.isNotEmpty(jdbcUrl) && StringUtils.isNotEmpty(userName) && StringUtils.isNotEmpty(password)){
+ try{
+ Class.forName(driverManager);
+ return true;
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ return false;
+ }
}