From 608f365b607e00553f17361ba6feafbdf68e6985 Mon Sep 17 00:00:00 2001
From: gtl <2949451835@qq.com>
Date: Thu, 9 May 2024 15:01:28 +0800
Subject: [PATCH] =?UTF-8?q?feat:=E5=88=9D=E5=A7=8B=E5=8C=96=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E8=BD=AC=E6=8D=A2=E6=A8=A1=E5=9D=97,druid=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E6=BA=90=E8=8E=B7=E5=8F=96=E6=AD=A3=E5=B8=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../security/aspect/PreAuthorizeAspect.java | 1 -
.../ruoyi-data_asset-client/pom.xml | 5 +
.../config/DataAssetApplicationRunner.java | 91 ++++++++++++++++++-
.../config/DataAssetClientConfig.java | 15 ---
.../config/DruidDataSourceFactory.java | 29 ++++++
...ot.autoconfigure.AutoConfiguration.imports | 2 +-
.../remote/RemoteDataAssetService.java | 1 -
.../controller/DataSourceController.java | 2 +-
.../controller/DataSourceTestController.java | 29 ++++++
.../controller/EngineVersionController.java | 2 +-
10 files changed, 154 insertions(+), 23 deletions(-)
delete mode 100644 ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DataAssetClientConfig.java
create mode 100644 ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DruidDataSourceFactory.java
create mode 100644 ruoyi-modules/ruoyi-data_transform/src/main/java/com/ruoyi/dataTransform/controller/DataSourceTestController.java
diff --git a/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/PreAuthorizeAspect.java b/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/PreAuthorizeAspect.java
index f0ecb04..51e6890 100644
--- a/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/PreAuthorizeAspect.java
+++ b/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/PreAuthorizeAspect.java
@@ -10,7 +10,6 @@ import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
-
import java.lang.reflect.Method;
/**
diff --git a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/pom.xml b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/pom.xml
index 5427789..6e527a8 100644
--- a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/pom.xml
+++ b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/pom.xml
@@ -18,6 +18,11 @@
UTF-8
+
+ com.muyu
+ ruoyi-data_asset-common
+ 3.6.3
+
com.muyu
ruoyi-data_asset-remote
diff --git a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DataAssetApplicationRunner.java b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DataAssetApplicationRunner.java
index 817b301..1e2c845 100644
--- a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DataAssetApplicationRunner.java
+++ b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DataAssetApplicationRunner.java
@@ -1,6 +1,9 @@
package com.ruoyi.dataAsset.config;
+import com.alibaba.druid.pool.DruidDataSource;
import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.dataAsset.domain.DataSource;
import com.ruoyi.dataAsset.domain.req.DataSourceQueryReq;
@@ -9,6 +12,7 @@ import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
+import java.util.List;
/**
* 数据资产应用程序运行程序
@@ -22,13 +26,94 @@ public class DataAssetApplicationRunner implements ApplicationRunner {
@Autowired
private RemoteDataAssetService remoteDataAssetService;
+ @Autowired
+ private DruidDataSourceFactory druidDataSourceFactory;
+
@Override
public void run(ApplicationArguments args) throws Exception {
Result> result = remoteDataAssetService.list(new DataSourceQueryReq());
if(Result.isSuccess(result)){
- log.info(result.getData());
- }else {
- log.error(result.getMsg());
+ this.druidDataSourceMap(result.getData().getRows());
}
}
+
+
+ public void druidDataSourceMap(List dataSourceList){
+ for (DataSource dataSource : dataSourceList) {
+ if(dataSource.getStatus().equals("N")){
+ continue;
+ }
+ try {
+ druidDataSourceFactory.put(dataSource.getId(),this.createDataSource(dataSource));
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage());
+ }
+ }
+ };
+
+ /**
+ * 获取Druid连接池数据源
+ * @param dataSource 数据源
+ * @return Druid数据源
+ */
+ public DruidDataSource createDataSource(DataSource dataSource) {
+ DruidDataSource druidDataSource = null;
+ String driverType=null;
+ String url="jdbc:"+dataSource.getDatabaseType()+dataSource.getIp()+":"+dataSource.getPort();
+ if(dataSource.getDatabaseType().contains("mysql")){
+ driverType="com.mysql.cj.jdbc.Driver";
+ url+="/"+dataSource.getDatabases();
+ }else if(dataSource.getDatabaseType().contains("sqlserver")){
+ driverType="com.microsoft.sqlserver.jdbc.SQLServerDriver";
+ url+=";DatabaseName="+dataSource.getDatabases()+";";
+ }
+ if(StringUtils.isNotEmpty(dataSource.getConnectionParameter())){
+ if(dataSource.getDatabaseType().contains("mysql")){
+ url+="?"+dataSource.getConnectionParameter();
+ }else {
+ url+=dataSource.getConnectionParameter()+";";
+ }
+ }
+ try {
+ //手动创建数据源
+ druidDataSource = new DruidDataSource();
+ druidDataSource.setName(dataSource.getId().toString());
+ druidDataSource.setDriverClassName(driverType);
+ druidDataSource.setUrl(url);
+ druidDataSource.setUsername(dataSource.getUsername());
+ druidDataSource.setPassword(dataSource.getPassword());
+ //设置连接配置
+ if(StringUtils.isNotEmpty(dataSource.getConnectionConfig())){
+ String[] configs = dataSource.getConnectionConfig().split(",");
+ for (String config : configs) {
+ String[] split = config.split("=");
+ if(config.contains("initNum")){
+ //初始化连接池大小
+ druidDataSource.setInitialSize(split.length>1&&!split[1].equals("null")&&StringUtils.isNotEmpty(split[1])? Convert.toInt(split[1]):5);
+ }else if(config.contains("maxNum")){
+ //最大连接数
+ druidDataSource.setMaxActive(split.length>1&&!split[1].equals("null")&&StringUtils.isNotEmpty(split[1])?Convert.toInt(split[1]):20);
+ }else if(config.contains("minIdle")){
+ //最小空闲数
+ druidDataSource.setMinIdle(split.length>1&&!split[1].equals("null")&&StringUtils.isNotEmpty(split[1])?Convert.toInt(split[1]):5);
+ }else {
+ //获取连接最大等待时间,单位毫秒
+ druidDataSource.setMaxWait(split.length>1&&!split[1].equals("null")&&StringUtils.isNotEmpty(split[1])?Convert.toInt(split[1]):4000);
+ }
+ }
+ }
+ String validationQuery = "select 1";
+ //申请连接时执行validationQuery检测连接是否有效,防止取到的连接不可用
+ druidDataSource.setTestOnBorrow(true);
+ druidDataSource.setValidationQuery(validationQuery);
+ //防止DruidDataSource一直尝试获取连接,导致服务卡死
+ druidDataSource.setConnectionErrorRetryAttempts(0);
+ druidDataSource.setBreakAfterAcquireFailure(true);
+ druidDataSource.setConnectTimeout(2000);
+ druidDataSource.init();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return druidDataSource;
+ }
}
diff --git a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DataAssetClientConfig.java b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DataAssetClientConfig.java
deleted file mode 100644
index 0f5ac75..0000000
--- a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DataAssetClientConfig.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.ruoyi.dataAsset.config;
-
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Import;
-
-/**
- * 数据资产客户端配置
- * @ClassName DataAssetClientConfig
- * @Author 森静若林
- * @Date 2024/5/8 20:30
- */
-@ComponentScan
-@Import(DataAssetApplicationRunner.class)
-public class DataAssetClientConfig {
-}
diff --git a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DruidDataSourceFactory.java b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DruidDataSourceFactory.java
new file mode 100644
index 0000000..99096e4
--- /dev/null
+++ b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/java/com/ruoyi/dataAsset/config/DruidDataSourceFactory.java
@@ -0,0 +1,29 @@
+package com.ruoyi.dataAsset.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Import;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 数据资产客户端配置
+ * @ClassName DataAssetClientConfig
+ * @Author 森静若林
+ * @Date 2024/5/8 20:30
+ */
+@ComponentScan
+@Import(DataAssetApplicationRunner.class)
+public class DruidDataSourceFactory {
+
+ private final Map druidDataSourceMap=new HashMap<>();
+
+ public Map getMap(){
+ return this.druidDataSourceMap;
+ }
+
+ public void put(Long id,DruidDataSource druidDataSource){
+ this.druidDataSourceMap.put(id,druidDataSource);
+ }
+}
diff --git a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 44754d7..75f0026 100644
--- a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1 +1 @@
-com.ruoyi.dataAsset.config.DataAssetClientConfig
+com.ruoyi.dataAsset.config.DruidDataSourceFactory
diff --git a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-remote/src/main/java/com/ruoyi/dataAsset/remote/RemoteDataAssetService.java b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-remote/src/main/java/com/ruoyi/dataAsset/remote/RemoteDataAssetService.java
index 06667ae..43b6a59 100644
--- a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-remote/src/main/java/com/ruoyi/dataAsset/remote/RemoteDataAssetService.java
+++ b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-remote/src/main/java/com/ruoyi/dataAsset/remote/RemoteDataAssetService.java
@@ -3,7 +3,6 @@ package com.ruoyi.dataAsset.remote;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.web.page.TableDataInfo;
-import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.dataAsset.domain.DataSource;
import com.ruoyi.dataAsset.domain.req.DataSourceQueryReq;
import com.ruoyi.dataAsset.remote.factory.RemoteDataAssetFactory;
diff --git a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/controller/DataSourceController.java b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/controller/DataSourceController.java
index ab86dcb..57ce29b 100644
--- a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/controller/DataSourceController.java
+++ b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/controller/DataSourceController.java
@@ -44,7 +44,7 @@ public class DataSourceController extends BaseController {
* 查询数据接入列表
*/
@ApiOperation("获取数据接入列表")
- @RequiresPermissions("dataAsset:source:list")
+ //@RequiresPermissions("dataAsset:source:list")
@GetMapping("/list")
public Result> list(DataSourceQueryReq dataSourceQueryReq) {
startPage();
diff --git a/ruoyi-modules/ruoyi-data_transform/src/main/java/com/ruoyi/dataTransform/controller/DataSourceTestController.java b/ruoyi-modules/ruoyi-data_transform/src/main/java/com/ruoyi/dataTransform/controller/DataSourceTestController.java
new file mode 100644
index 0000000..85ca996
--- /dev/null
+++ b/ruoyi-modules/ruoyi-data_transform/src/main/java/com/ruoyi/dataTransform/controller/DataSourceTestController.java
@@ -0,0 +1,29 @@
+package com.ruoyi.dataTransform.controller;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.dataAsset.config.DruidDataSourceFactory;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 数据源测试
+ * @ClassName DataSourceTestController
+ * @Author 森静若林
+ * @Date 2024/5/9 10:56
+ */
+@RestController
+public class DataSourceTestController {
+
+ @Resource
+ private DruidDataSourceFactory druidDataSourceFactory;
+
+ @GetMapping("/test")
+ public Result