This commit is contained in:
houxinyu
2023-07-02 13:44:35 +08:00
parent 1c32e2b5c5
commit 9e2b8d5dbf
3 changed files with 42 additions and 17 deletions

View File

@@ -7,6 +7,7 @@ import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.parser.el.ClassXmlFlowELParser;
import com.yomahub.liteflow.parser.redis.exception.RedisException;
import com.yomahub.liteflow.parser.redis.util.RedisParserHelper;
import com.yomahub.liteflow.parser.redis.vo.RedisParserVO;
import com.yomahub.liteflow.property.LiteflowConfig;
import com.yomahub.liteflow.property.LiteflowConfigGetter;
@@ -16,6 +17,8 @@ import java.util.Objects;
public class RedisXmlELParser extends ClassXmlFlowELParser {
private final RedisParserHelper redisParserHelper;
private static final String ERROR_COMMON_MSG = "ruleSourceExtData or map is empty";
private static final String ERROR_MSG_PATTERN = "uleSourceExtData {} is blank";
@@ -38,6 +41,8 @@ public class RedisXmlELParser extends ClassXmlFlowELParser {
//检查配置文件
checkParserVO(redisParserVO);
redisParserHelper = new RedisParserHelper(redisParserVO);
}
catch (RedisException redisException){
throw redisException;

View File

@@ -1,10 +1,14 @@
package com.yomahub.liteflow.parser.redis.util;
import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.parser.redis.exception.RedisException;
import com.yomahub.liteflow.parser.redis.vo.RedisParserVO;
import com.yomahub.liteflow.spi.holder.ContextAwareHolder;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -14,6 +18,8 @@ public class RedisParserHelper {
private RedisParserVO redisParserVO;
private final String REDIS_URL_PATTERN = "redis://{}:{}";
private final String CHAIN_XML_PATTERN = "<chain name=\"{}\">{}</chain>";
private final String NODE_XML_PATTERN = "<nodes>{}</nodes>";
@@ -24,19 +30,31 @@ public class RedisParserHelper {
private static final String XML_PATTERN = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><flow>{}{}</flow>";
private RedissonClient redissonClient;
private RedissonClient chainClient;
private RedissonClient scriptClient;
public RedisParserHelper(RedisParserVO redisParserVO) {
this.redisParserVO = redisParserVO;
try{
try{
this.redissonClient = ContextAwareHolder.loadContextAware().getBean(RedissonClient.class);
this.chainClient = ContextAwareHolder.loadContextAware().getBean("chainClient");
this.scriptClient = ContextAwareHolder.loadContextAware().getBean("scriptClient");
}
catch (Exception ignored){
}
if(ObjectUtil.isNull(redissonClient)){
//todo get client
if(ObjectUtil.isNull(chainClient)){
Config config = new Config();
config = getRedissonConfig(redisParserVO, config,
Integer.parseInt(redisParserVO.getChainDataBase()));
this.chainClient = Redisson.create(config);
//如果有脚本数据
if (StrUtil.isNotBlank(redisParserVO.getScriptDataBase())){
config = getRedissonConfig(redisParserVO, config,
Integer.parseInt(redisParserVO.getScriptDataBase()));
this.scriptClient = Redisson.create(config);
}
}
}
catch (Exception e){
@@ -44,4 +62,17 @@ public class RedisParserHelper {
}
}
private Config getRedissonConfig(RedisParserVO redisParserVO, Config config, Integer dataBase){
String redisAddress = StrFormatter.format(REDIS_URL_PATTERN, redisParserVO.getHost(), redisParserVO.getPort());
if (StrUtil.isNotBlank(redisParserVO.getPassword())){
config.useSingleServer().setAddress(redisAddress)
.setPassword(redisParserVO.getPassword())
.setDatabase(dataBase);
} else{
config.useSingleServer().setAddress(redisAddress)
.setDatabase(dataBase);
}
return config;
}
}

View File

@@ -8,9 +8,6 @@ public class RedisParserVO {
/*端口号*/
private String port;
/*账号名*/
private String username;
/*密码*/
private String password;
@@ -26,10 +23,10 @@ public class RedisParserVO {
/*chain配置的键名*/
private String chainKey;
/*脚本表配置的数据库号*/
/*脚本表配置的数据库号 若没有脚本数据可不配置*/
private String scriptDataBase;
/*脚本配置的键名*/
/*脚本配置的键名 若没有脚本数据可不配置*/
private String scriptKey;
public String getHost() {
@@ -48,14 +45,6 @@ public class RedisParserVO {
this.port = port;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}