diff --git a/muyu-modules/muyu-data-source/muyu-data-source-client/pom.xml b/muyu-modules/muyu-data-source/muyu-data-source-client/pom.xml index d5a97d0..0fc701a 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-client/pom.xml +++ b/muyu-modules/muyu-data-source/muyu-data-source-client/pom.xml @@ -16,5 +16,11 @@ 17 UTF-8 - + + + com.muyu + muyu-data-source-remote + 3.6.3 + + diff --git a/muyu-modules/muyu-data-source/muyu-data-source-client/src/main/java/com/muyu/data/source/client/config/SourceClientRunner.java b/muyu-modules/muyu-data-source/muyu-data-source-client/src/main/java/com/muyu/data/source/client/config/SourceClientRunner.java new file mode 100644 index 0000000..6daa345 --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-client/src/main/java/com/muyu/data/source/client/config/SourceClientRunner.java @@ -0,0 +1,55 @@ +package com.muyu.data.source.client.config; + +import com.muyu.common.core.domain.Result; +import com.muyu.data.source.config.DataSourceConfig; +import com.muyu.data.source.domain.DataSource; +import com.muyu.data.source.domain.DatabaseType; +import com.muyu.data.source.remote.RemoteDataSourceService; +import com.muyu.data.source.remote.RemoteDataTypeService; +import java.sql.Connection; +import java.util.List; +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; + +/** + * 初始化加载 + * + * @author HuFangMing + * @ClassName: SourceClientRunner + * @createTime: 2024/5/13 14:15 + */ + +@Log4j2 +@Configuration +public class SourceClientRunner implements ApplicationRunner { + + @Autowired + private RemoteDataSourceService remoteDataSourceService; + @Autowired + private RemoteDataTypeService remoteDataTypeService; + + @Override + public void run(ApplicationArguments args) throws Exception { + Result> dataSourceListResult = remoteDataSourceService.getDataSourceList(); + List dataSourceList = dataSourceListResult.getData(); + dataSourceList.stream().forEach(dataSource -> { + Result databaseTypeResult = remoteDataTypeService.getDataType(dataSource.getDatabaseName()); + DatabaseType databaseType = databaseTypeResult.getData(); + DataSourceConfig.init(dataSource,databaseType); + }); + Long key = dataSourceList.get(0).getId(); + log.info("查看连接池"); + DataSourceConfig.size(key); + Thread.sleep(500); + log.info("取出一个链接,查看连接池"); + Connection connection = DataSourceConfig.getConnection(key); + DataSourceConfig.size(key); + Thread.sleep(500); + log.info("返回一个连接,查看连接池"); + DataSourceConfig.returnConn(connection); + DataSourceConfig.size(key); + } +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/pom.xml b/muyu-modules/muyu-data-source/muyu-data-source-common/pom.xml index 0ff2638..5d7ad7c 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-common/pom.xml +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/pom.xml @@ -29,5 +29,82 @@ com.muyu muyu-common-log + + + com.alibaba + druid + + + + org.postgresql + postgresql + + + + com.muyu + muyu-modules-system + 3.6.3 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + muyu-common-datasource + + + + + com.muyu + muyu-common-datascope + + + + + com.muyu + muyu-common-log + + + + + com.muyu + muyu-common-swagger + diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/config/DataSourceConfig.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/config/DataSourceConfig.java new file mode 100644 index 0000000..05b509f --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/config/DataSourceConfig.java @@ -0,0 +1,68 @@ +package com.muyu.data.source.config; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidPooledConnection; +import com.muyu.data.source.domain.DataSource; +import com.muyu.data.source.domain.DatabaseType; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.HashMap; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Component; + +/** + * 数据源配置连接池 + * + * @author HuFangMing + * @ClassName: DataSourceConfig + * @createTime: 2024/5/13 15:25 + */ + +@Component +@Log4j2 +public class DataSourceConfig { + private static HashMap dataSourceMap=new HashMap<>(); + + public static void init(DataSource dataSource, DatabaseType databaseType){ + DruidDataSource druidDataSource = new DruidDataSource(); + druidDataSource.setUsername(dataSource.getUser()); + druidDataSource.setPassword(dataSource.getPassword()); + druidDataSource.setUrl(databaseType.getUrlPre()+dataSource.getHost()+":"+dataSource.getPort()+"/"+dataSource.getDatabaseName()+"?"+dataSource.getConnectionParam()); + druidDataSource.setDriverClassName(databaseType.getDriverManager()); + druidDataSource.setMinIdle(Math.toIntExact(dataSource.getMaxWaitSize())); + druidDataSource.setMaxActive(Math.toIntExact(dataSource.getMaxNum())); + druidDataSource.setInitialSize(Math.toIntExact(dataSource.getInitNum())); + + try { + druidDataSource.init(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + dataSourceMap.put(dataSource.getId(), druidDataSource); + } + + public static Connection getConnection(Long key){ + DruidDataSource druidDataSource=dataSourceMap.get(key); + try { + DruidPooledConnection connection = druidDataSource.getConnection(); + return connection; + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public static void returnConn(Connection connection){ + try { + connection.close(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public static void size(Long key){ + DruidDataSource druidDataSource=dataSourceMap.get(key); + int activeCount = druidDataSource.getActiveCount(); + int poolingCount = druidDataSource.getPoolingCount(); + log.info(key+"连接池正在使用连接"+activeCount+"个,线程池中线程数量"+poolingCount+"个"); + } +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/RemoteDataSourceService.java b/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/RemoteDataSourceService.java index a8e47ac..c173116 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/RemoteDataSourceService.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/RemoteDataSourceService.java @@ -3,6 +3,7 @@ package com.muyu.data.source.remote; import com.muyu.common.core.constant.ServiceNameConstants; import com.muyu.common.core.domain.Result; import com.muyu.data.source.domain.DataSource; +import com.muyu.data.source.remote.factory.RemoteDataSourceFactory; import java.util.List; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @@ -17,10 +18,10 @@ import org.springframework.web.bind.annotation.GetMapping; @FeignClient(contextId ="RemoteDataSourceService", value = ServiceNameConstants.SOURCE_SERVICE, fallbackFactory = RemoteDataSourceFactory.class, - path = "/data" + path = "/data/source" ) public interface RemoteDataSourceService { -@GetMapping("/getDataSourceList") +@GetMapping("getDataSourceList/") public Result> getDataSourceList(); } diff --git a/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/RemoteDataSourceFactory.java b/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/factory/RemoteDataSourceFactory.java similarity index 85% rename from muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/RemoteDataSourceFactory.java rename to muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/factory/RemoteDataSourceFactory.java index d43c6b9..3985f75 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/RemoteDataSourceFactory.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/factory/RemoteDataSourceFactory.java @@ -1,7 +1,8 @@ -package com.muyu.data.source.remote; +package com.muyu.data.source.remote.factory; import com.muyu.common.core.domain.Result; import com.muyu.data.source.domain.DataSource; +import com.muyu.data.source.remote.RemoteDataSourceService; import java.util.List; import org.springframework.cloud.openfeign.FallbackFactory; diff --git a/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/factory/RemoteDataTypeFactory.java b/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/factory/RemoteDataTypeFactory.java new file mode 100644 index 0000000..5a7a357 --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/java/com/muyu/data/source/remote/factory/RemoteDataTypeFactory.java @@ -0,0 +1,24 @@ +package com.muyu.data.source.remote.factory; + +import com.muyu.common.core.domain.Result; +import com.muyu.data.source.domain.DatabaseType; +import com.muyu.data.source.remote.RemoteDataTypeService; +import org.springframework.cloud.openfeign.FallbackFactory; + +/** + * 熔断 + * + * @author CHX + * on 2024/5/10 星期五 + */ +public class RemoteDataTypeFactory implements FallbackFactory { + @Override + public RemoteDataTypeService create(Throwable cause) { + return new RemoteDataTypeService() { + @Override + public Result getDataType(String databaseName) { + return Result.error(cause.getMessage()); + } + }; + } +} diff --git a/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..f095f3e --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.muyu.source.remote.factory.RemoteDataSourceFactory +com.muyu.source.remote.factory.RemoteDataTypeFactory diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java index c207c8d..2751f7b 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java @@ -55,6 +55,18 @@ public class DataSourceController extends BaseController { return getDataTable(list); } + /** + * 获取数据源列表信息 + */ + + @ApiOperation("获取数据源列表信息") + @GetMapping("/getDataSourceList") + public Result> getDataSourceList(){ + List list=dataSourceService.list(); + return Result.success(list); + } + + /** * 导出数据源列表 */ diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DatabaseTypeController.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DatabaseTypeController.java index e786dc0..10fa7eb 100644 --- a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DatabaseTypeController.java +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DatabaseTypeController.java @@ -1,5 +1,6 @@ package com.muyu.data.source.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -109,8 +110,16 @@ public class DatabaseTypeController extends BaseController { return toAjax(databaseTypeService.removeBatchByIds(databaseIds)); } - - +/** + * 查询数据源类型对象 + */ +@ApiOperation("查询数据源类型对象") +@GetMapping("/getDatabaseType/{databaseName}") +public Result getDatabaseType(@PathVariable("databaseName") String databaseName) { + return Result.success(databaseTypeService.getOne(new LambdaQueryWrapper<>(){{ + eq(DatabaseType::getDatabaseName,databaseName); + }})); +} } diff --git a/muyu-modules/muyu-data-test/pom.xml b/muyu-modules/muyu-data-test/pom.xml new file mode 100644 index 0000000..dbb9a79 --- /dev/null +++ b/muyu-modules/muyu-data-test/pom.xml @@ -0,0 +1,68 @@ + + + 4.0.0 + + com.muyu + muyu-modules + 3.6.3 + + + muyu-data-test + + + 17 + 17 + UTF-8 + + + + com.muyu + muyu-data-source-client + 3.6.3 + + + + com.muyu + muyu-rule-client + 3.6.3 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + com.muyu + muyu-common-swagger + + + + diff --git a/muyu-modules/muyu-data-test/src/main/java/data/test/MuYuDataTestApplication.java b/muyu-modules/muyu-data-test/src/main/java/data/test/MuYuDataTestApplication.java new file mode 100644 index 0000000..c97d657 --- /dev/null +++ b/muyu-modules/muyu-data-test/src/main/java/data/test/MuYuDataTestApplication.java @@ -0,0 +1,25 @@ +package data.test; + +import com.muyu.common.security.annotation.EnableCustomConfig; +import com.muyu.common.security.annotation.EnableMyFeignClients; +import com.muyu.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +/** + * 数据测试启动类 + * + * @author HuFangMing + * @ClassName: MuYuDataTestApplication + * @createTime: 2024/5/13 9:40 + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class MuYuDataTestApplication { + public static void main(String[] args) { + SpringApplication.run(MuYuDataTestApplication.class, args); + } +} diff --git a/muyu-modules/muyu-data-test/src/main/resources/bootstrap.yml b/muyu-modules/muyu-data-test/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..7bd89bf --- /dev/null +++ b/muyu-modules/muyu-data-test/src/main/resources/bootstrap.yml @@ -0,0 +1,27 @@ +# Tomcat +server: + port: 9260 + +# Spring +spring: + application: + # 应用名称 + name: muyu-data-test + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.16.128:8848 + namespace: ry + config: + # 配置中心地址 + server-addr: 192.168.16.128:8848 + namespace: ry + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/muyu-modules/muyu-data-test/src/main/resources/logback.xml b/muyu-modules/muyu-data-test/src/main/resources/logback.xml new file mode 100644 index 0000000..c8811bb --- /dev/null +++ b/muyu-modules/muyu-data-test/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-modules/muyu-rule_engine/muyu-rule-client/src/main/java/com/muyu/rule/client/config/RuleEngineClientRunner.java b/muyu-modules/muyu-rule_engine/muyu-rule-client/src/main/java/com/muyu/rule/client/config/RuleEngineClientRunner.java deleted file mode 100644 index f31f897..0000000 --- a/muyu-modules/muyu-rule_engine/muyu-rule-client/src/main/java/com/muyu/rule/client/config/RuleEngineClientRunner.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.muyu.rule.client.config; - -import com.muyu.common.core.domain.Result; -import com.muyu.ruleEngine.domain.EngineMaintenance; -import com.muyu.ruleEngine.remote.RemoteEngineMaintenanceService; -import java.util.List; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; - -/** - * 初始化加载 - * - * @author HuFangMing - * @ClassName: RuleEngineClientRunner - * @createTime: 2024/5/10 15:17 - */ - -@Log4j2 -public class RuleEngineClientRunner implements ApplicationRunner { -@Autowired - private RemoteEngineMaintenanceService engineMaintenanceService; - - - @Override - public void run(ApplicationArguments args) throws Exception { - Result> maintenanceList = engineMaintenanceService.getMaintenanceList(); - - log.info(maintenanceList); - } -} diff --git a/muyu-modules/pom.xml b/muyu-modules/pom.xml index 0c1769b..f04ff50 100644 --- a/muyu-modules/pom.xml +++ b/muyu-modules/pom.xml @@ -15,6 +15,7 @@ muyu-file muyu-data-source muyu-rule_engine + muyu-data-test muyu-modules diff --git a/pom.xml b/pom.xml index 174e869..31a1151 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,7 @@ 2.9.0 42.5.0 2.14.3 + 1.2.6 @@ -143,7 +144,12 @@ fastjson2 ${fastjson.version} - + + + com.alibaba + druid + ${druid.version} + io.jsonwebtoken