feat:初始化数据转换模块,druid数据源获取正常

dev
gtl 2024-05-09 15:01:28 +08:00
parent 81c1289111
commit 608f365b60
10 changed files with 154 additions and 23 deletions

View File

@ -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;
/**

View File

@ -18,6 +18,11 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>ruoyi-data_asset-common</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>ruoyi-data_asset-remote</artifactId>

View File

@ -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<TableDataInfo<DataSource>> 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<DataSource> 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;
}
}

View File

@ -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 {
}

View File

@ -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<Long, DruidDataSource> druidDataSourceMap=new HashMap<>();
public Map<Long,DruidDataSource> getMap(){
return this.druidDataSourceMap;
}
public void put(Long id,DruidDataSource druidDataSource){
this.druidDataSourceMap.put(id,druidDataSource);
}
}

View File

@ -1 +1 @@
com.ruoyi.dataAsset.config.DataAssetClientConfig
com.ruoyi.dataAsset.config.DruidDataSourceFactory

View File

@ -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;

View File

@ -44,7 +44,7 @@ public class DataSourceController extends BaseController {
*
*/
@ApiOperation("获取数据接入列表")
@RequiresPermissions("dataAsset:source:list")
//@RequiresPermissions("dataAsset:source:list")
@GetMapping("/list")
public Result<TableDataInfo<DataSource>> list(DataSourceQueryReq dataSourceQueryReq) {
startPage();

View File

@ -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<Object> test(){
Map<Long, DruidDataSource> map = druidDataSourceFactory.getMap();
System.out.println(map);
return Result.success();
}
}

View File

@ -39,7 +39,7 @@ public class EngineVersionController extends BaseController {
*
*/
@ApiOperation("查询引擎规则版本列表")
@RequiresPermissions("ruleEngine:version:list")
//@RequiresPermissions("ruleEngine:version:list")
@GetMapping("/list")
public Result<List<EngineVersion>> list(EngineVersionQueryReq engineConfigQueryReq) {
return Result.success(engineVersionService.list(EngineVersion.queryBuild(engineConfigQueryReq)));