feat():分离客户端

master
Saisai Liu 2024-05-10 22:41:42 +08:00
parent 8ec267ac4b
commit 0f399010c9
24 changed files with 415 additions and 82 deletions

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>muyu-common</artifactId>
<version>3.6.3</version>
</parent>
<artifactId>muyu-common-cache</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- MuYu Common Security -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-security</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,20 @@
package com.muyu.cache.redis;
/**
* @ClassName RedisCache
* @Description
* @Author SaiSai.Liu
* @Date 2024/5/10 19:01
*/
public interface RedisCache<K,V,T> {
K getKey(T t);
V get(K key);
void put(K k ,V v);
void remove(K k);
}

View File

@ -17,9 +17,13 @@ public class ServiceNameConstants {
public static final String SYSTEM_SERVICE = "muyu-system"; public static final String SYSTEM_SERVICE = "muyu-system";
/** /**
* serviceid * serviceid
*/ */
public static final String ENGINE_SERVICE = "muyu-engine"; public static final String ENGINE_SERVICE = "muyu-engine";
/**
* etlserviceid
*/
public static final String ETL_SERVICE = "muyu-etl";
/** /**
* serviceid * serviceid

View File

@ -18,6 +18,7 @@
<module>muyu-common-datascope</module> <module>muyu-common-datascope</module>
<module>muyu-common-datasource</module> <module>muyu-common-datasource</module>
<module>muyu-common-system</module> <module>muyu-common-system</module>
<module>muyu-common-cache</module>
</modules> </modules>
<artifactId>muyu-common</artifactId> <artifactId>muyu-common</artifactId>

View File

@ -0,0 +1,55 @@
package com.muyu.etl;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.etl.domain.BasicConfigInfo;
import com.muyu.etl.uitl.DruidUtilsFactory;
import com.muyu.etl.uitl.service.ConnectionPoolFactory;
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.stereotype.Component;
import javax.servlet.ServletException;
import java.sql.SQLException;
import java.util.List;
/**
* @ClassName AssetClientRunner
* @Description
* @Author SaiSai.Liu
* @Date 2024/5/9 21:26
*/
@Component
@Log4j2
public class AssetClientRunner implements ApplicationRunner {
@Autowired
private RemoteAssetService remoteAssetService;
@Autowired
private ConnectionPoolFactory connectionPoolFactory;
@Override
public void run(ApplicationArguments args) throws ServletException {
Result<TableDataInfo<BasicConfigInfo>> result = remoteAssetService.list(new BasicConfigInfo(), SecurityConstants.INNER);
log.info("初始话内容为{}",result);
if (result.getData().getRows().isEmpty()) throw new ServletException("初始化调用失败,无数据");
result.getData().getRows().stream().map(basicConfigInfo -> {
DruidPooledConnection init = null;
try {
init = connectionPoolFactory.init(basicConfigInfo);
log.info("初始化结果:{}",init);
} catch (SQLException e) {
log.error("初始化异常:{}",e.getMessage());
throw new RuntimeException(e);
}
return init;
});
log.info("初始化完成");
log.info("连接池::{}",DruidUtilsFactory.map);
}
}

View File

@ -1,33 +0,0 @@
package com.muyu.etl;
import com.etl.RemoteAssetService;
import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.etl.domain.BasicConfigInfo;
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.stereotype.Component;
import java.util.List;
/**
* @ClassName EtlRunner
* @Description
* @Author SaiSai.Liu
* @Date 2024/5/9 21:26
*/
@Component
@Log4j2
public class EtlRunner implements ApplicationRunner {
@Autowired
private RemoteAssetService remoteAssetService;
@Override
public void run(ApplicationArguments args) throws Exception {
List<BasicConfigInfo> rows = remoteAssetService.list(null, SecurityConstants.INNER).getData().getRows();
log.info(rows);
}
}

View File

@ -1,6 +1,6 @@
package com.muyu.etl.config; package com.muyu.etl.config;
import com.muyu.etl.EtlRunner; import com.muyu.etl.AssetClientRunner;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
* @Date 2024/5/9 21:45 * @Date 2024/5/9 21:45
*/ */
@Component @Component
@Import(value = {EtlRunner.class}) @Import(value = {AssetClientRunner.class})
public class AssetClientConfig { public class AssetClientConfig {
} }

View File

@ -0,0 +1,76 @@
package com.muyu.etl.uitl;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.muyu.etl.domain.BasicConfigInfo;
import com.muyu.etl.uitl.service.ConnectionPoolFactory;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
public class DruidUtilsFactory implements ConnectionPoolFactory<BasicConfigInfo> {
// 连接池容器
public static HashMap<String, DruidPooledConnection> map = new HashMap<>();
/**
*
* @param basicConfigInfo
* @return
* @throws SQLException
*/
@Override
public DruidPooledConnection init(BasicConfigInfo basicConfigInfo) throws SQLException {
// 连接池对象
DruidDataSource source = new DruidDataSource();
// 定义下面需要的对象
String host = basicConfigInfo.getHost();
String port = basicConfigInfo.getPort();
String databaseName = basicConfigInfo.getDatabaseName();
String databaseType = basicConfigInfo.getDatabaseType();
// 引擎配置
source.setUrl("jdbc:" + databaseType + "://" + host + ":" + port + "/" + databaseName + "?" + basicConfigInfo.getConnectionParams());
source.setUsername(basicConfigInfo.getUsername());
source.setPassword(basicConfigInfo.getPassword());
source.setInitialSize(Math.toIntExact(basicConfigInfo.getInitLinkNum()));
source.setMaxActive(Math.toIntExact(basicConfigInfo.getMaxLinkNum()));
source.setMaxWaitThreadCount(Math.toIntExact(basicConfigInfo.getMaxWaitTimes()));
source.setMaxEvictableIdleTimeMillis(basicConfigInfo.getMaxWaitTime());
DruidPooledConnection pool = source.getConnection();
map.put(host + ":" + port + "/" + databaseName, pool);
// 获取并返回连接池对象
return pool;
}
/**
*
* @param basicConfigInfo
* @return
*/
@Override
public Connection getConnection(BasicConfigInfo basicConfigInfo) {
String host = basicConfigInfo.getHost();
String port = basicConfigInfo.getPort();
String databaseName = basicConfigInfo.getDatabaseName();
DruidPooledConnection druidPooledConnection = map.get(host + ":" + port + "/" + databaseName);
Connection connection = druidPooledConnection.getConnection();
return connection;
}
/**
*
* @param basicConfigInfo
* @param connection
*/
@Override
public void giveBack(BasicConfigInfo basicConfigInfo, Connection connection) throws SQLException {
String host = basicConfigInfo.getHost();
String port = basicConfigInfo.getPort();
String databaseName = basicConfigInfo.getDatabaseName();
DruidPooledConnection druidPooledConnection = map.get(host + ":" + port + "/" + databaseName);
druidPooledConnection.close();
}
}

View File

@ -0,0 +1,73 @@
package com.muyu.etl.uitl;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
/**
* JdbcUtils
* @author : Saisai.Liu
* @version : 21.0
*/
public class JDBCUtils {
private static String driver; //Driver驱动
private static String url; //Uniform Resource Locator包含数据库信息
private static String user; //用户名
private static String password; //用户密码
static {
Properties properties = new Properties();
try {
//Class.forName(driver);
properties.load(new FileInputStream("src/api/connection/mysql.properties"));
driver = properties.getProperty("driver");
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
} catch (IOException e) {
/*
;
便
*/
throw new RuntimeException(e);
}
}
//获取连接
public static Connection getConnection() {
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//释放资源
/**
* @param resultSet : DQL
* @param statement : StatementPreparedStatement
* @param connection : getConnection
*/
public static void close(ResultSet resultSet, Statement statement, Connection connection) {
/*
DMLResultSetnull;
close
*/
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -0,0 +1,27 @@
package com.muyu.etl.uitl.service;
import com.alibaba.druid.pool.DruidPooledConnection;
import java.sql.Connection;
import java.sql.SQLException;
/**
* @ClassName PoolFactory
* @Description
* @Author SaiSai.Liu
* @Date 2024/5/10 16:28
*/
public interface ConnectionPoolFactory<T> {
/**
*
* @param t
* @return
* @throws SQLException
*/
public DruidPooledConnection init(T t) throws SQLException;
public Connection getConnection(T t);
public void giveBack(T t, Connection connection) throws SQLException;
}

View File

@ -1 +1,2 @@
com.etl.factory.RemoteRuleEngineFallbackFactory com.muyu.etl.AssetClientRunner
com.muyu.etl.uitl.DruidUtilsFactory

View File

@ -0,0 +1,29 @@
# Tomcat
server:
port: 9215
# Spring
spring:
application:
# 应用名称
name: muyu-etl-client
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 43.142.100.73:8848
config:
# 配置中心地址
server-addr: 43.142.100.73:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
logging:
level:
com.muyu.etl.mapper: DEBUG
com.example.springmvctest.feign.api: DEBUG

View File

@ -0,0 +1,24 @@
package com.muyu.etl.domain.pool;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.springframework.context.annotation.Bean;
import javax.sql.PooledConnection;
/**
* @ClassName BeanPool
* @Description
* @Author SaiSai.Liu
* @Date 2024/5/10 15:19
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class BeanPool {
private String key;
private PooledConnection druidPooledConnection;
}

View File

@ -1,32 +0,0 @@
package com.etl;
import com.etl.factory.RemoteAssetFallbackFactory;
import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.common.core.constant.ServiceNameConstants;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.etl.domain.BasicConfigInfo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
/**
*
*
* @author muyu
*/
@FeignClient(contextId = "remoteRuleEngineService", value = ServiceNameConstants.ENGINE_SERVICE, fallbackFactory = RemoteAssetFallbackFactory.class)
public interface RemoteAssetService {
/**
*
*
* @param basicConfigInfo
* @param source
* @return
*/
@GetMapping("/list")
public Result<TableDataInfo<BasicConfigInfo>> list(BasicConfigInfo basicConfigInfo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -0,0 +1,17 @@
package com.muyu.etl;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignConfig {
/**
* feignClient
*/
@Bean
public Logger.Level feignLoggerLevel() {
// 请求和响应的头信息,请求和响应的正文及元数据
return Logger.Level.FULL;
}
}

View File

@ -0,0 +1,36 @@
package com.muyu.etl;
import com.muyu.etl.factory.RemoteAssetFallbackFactory;
import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.common.core.constant.ServiceNameConstants;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.etl.domain.BasicConfigInfo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
/**
*
*
* @author muyu
*/
@FeignClient(contextId = "remoteAssetService",
value = ServiceNameConstants.ETL_SERVICE,
fallbackFactory = RemoteAssetFallbackFactory.class)
public interface RemoteAssetService {
/**
*
*
* @param basicConfigInfo
* @param source
* @return
*/
@PostMapping("/info/list")
public Result<TableDataInfo<BasicConfigInfo>> list(@RequestBody BasicConfigInfo basicConfigInfo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -1,6 +1,6 @@
package com.etl.factory; package com.muyu.etl.factory;
import com.etl.RemoteAssetService; import com.muyu.etl.RemoteAssetService;
import com.muyu.common.core.domain.Result; import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.page.TableDataInfo; import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.etl.domain.BasicConfigInfo; import com.muyu.etl.domain.BasicConfigInfo;
@ -25,7 +25,7 @@ public class RemoteAssetFallbackFactory implements FallbackFactory<RemoteAssetSe
@Override @Override
public Result<TableDataInfo<BasicConfigInfo>> list(BasicConfigInfo basicConfigInfo, String source) { public Result<TableDataInfo<BasicConfigInfo>> list(BasicConfigInfo basicConfigInfo, String source) {
return Result.error("查询接入信息失败"); return Result.error("查询接入信息失败,"+throwable.getMessage());
} }
}; };
} }

View File

@ -1 +1 @@
com.etl.factory.RemoteRuleEngineFallbackFactory com.muyu.etl.factory.RemoteAssetFallbackFactory

View File

@ -89,6 +89,11 @@
<groupId>com.muyu</groupId> <groupId>com.muyu</groupId>
<artifactId>muyu-common-swagger</artifactId> <artifactId>muyu-common-swagger</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
</dependencies> </dependencies>

View File

@ -43,8 +43,8 @@ public class BasicConfigInfoController extends BaseController {
/** /**
* *
*/ */
@RequiresPermissions("etl:info:list") // @RequiresPermissions("etl:info:list")
@GetMapping("/list") @PostMapping("/list")
public Result<TableDataInfo<BasicConfigInfo>> list(BasicConfigInfo basicConfigInfo) { public Result<TableDataInfo<BasicConfigInfo>> list(BasicConfigInfo basicConfigInfo) {
startPage(); startPage();
List<BasicConfigInfo> list = basicConfigInfoService.selectBasicConfigInfoList(basicConfigInfo); List<BasicConfigInfo> list = basicConfigInfoService.selectBasicConfigInfoList(basicConfigInfo);

View File

@ -171,10 +171,10 @@ public class VelocityUtils {
fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName());
} else if (template.contains("mapper.java.vm")) { } else if (template.contains("mapper.java.vm")) {
fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className);
} else if (template.contains("service.java.vm")) { } else if (template.contains("redis.java.vm")) {
fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); fileName = StringUtils.format("{}/redis/I{}Service.java", javaPath, className);
} else if (template.contains("serviceImpl.java.vm")) { } else if (template.contains("serviceImpl.java.vm")) {
fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); fileName = StringUtils.format("{}/redis/impl/{}ServiceImpl.java", javaPath, className);
} else if (template.contains("controller.java.vm")) { } else if (template.contains("controller.java.vm")) {
fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className);
} else if (template.contains("mapper.xml.vm")) { } else if (template.contains("mapper.xml.vm")) {

View File

@ -129,7 +129,7 @@ public class RuleEngineVersionServiceImpl extends ServiceImpl<RuleEngineVersionM
fileName = fileName.substring(0, fileName.indexOf("implements")).trim(); fileName = fileName.substring(0, fileName.indexOf("implements")).trim();
} }
//代码编译 //代码编译
File file = new File("D:/ruoyi/FinallyTest/muyu-modules/muyu-ruleEngine/muyu-ruleEngine-service/src/main/java/" + path + "/" + fileName + ".java"); File file = new File("D:/ruoyi/FinallyTest/muyu-modules/muyu-ruleEngine/muyu-ruleEngine-redis/src/main/java/" + path + "/" + fileName + ".java");
if (!file.exists()) { if (!file.exists()) {
//不存在创建 //不存在创建
file.createNewFile(); file.createNewFile();
@ -176,8 +176,8 @@ public class RuleEngineVersionServiceImpl extends ServiceImpl<RuleEngineVersionM
String fileName = codeIng.substring(codeIng.indexOf("class") + 6, codeIng.indexOf("{")).trim(); String fileName = codeIng.substring(codeIng.indexOf("class") + 6, codeIng.indexOf("{")).trim();
String name = path + "." + fileName; String name = path + "." + fileName;
String javaPackageName = name.replace(".", File.separator) + ".java"; String javaPackageName = name.replace(".", File.separator) + ".java";
String javaAbsolutePath = "D:/ruoyi/FinallyTest/muyu-modules/muyu-ruleEngine/muyu-ruleEngine-service/src/main/java/" + javaPackageName; String javaAbsolutePath = "D:/ruoyi/FinallyTest/muyu-modules/muyu-ruleEngine/muyu-ruleEngine-redis/src/main/java/" + javaPackageName;
String jarAbsolutePath = "D:/ruoyi/FinallyTest/muyu-modules/muyu-ruleEngine/muyu-ruleEngine-service/target/classes/com/muyu/engine/domain/test"; String jarAbsolutePath = "D:/ruoyi/FinallyTest/muyu-modules/muyu-ruleEngine/muyu-ruleEngine-redis/target/classes/com/muyu/engine/domain/test";
Process process = Runtime.getRuntime().exec("javac -classpath " + jarAbsolutePath + " " + javaAbsolutePath); Process process = Runtime.getRuntime().exec("javac -classpath " + jarAbsolutePath + " " + javaAbsolutePath);
try { try {
int exitVal = process.waitFor(); int exitVal = process.waitFor();

View File

@ -15,7 +15,7 @@
//import com.muyu.common.log.enums.BusinessType; //import com.muyu.common.log.enums.BusinessType;
//import com.muyu.common.security.annotation.RequiresPermissions; //import com.muyu.common.security.annotation.RequiresPermissions;
//import com.muyu.system.domain.AsNoticeUser; //import com.muyu.system.domain.AsNoticeUser;
//import com.muyu.system.service.AsNoticeUserService; //import com.muyu.system.redis.AsNoticeUserService;
//import com.muyu.common.core.web.controller.BaseController; //import com.muyu.common.core.web.controller.BaseController;
//import com.muyu.common.core.domain.Result; //import com.muyu.common.core.domain.Result;
//import com.muyu.common.core.utils.poi.ExcelUtil; //import com.muyu.common.core.utils.poi.ExcelUtil;