1.修改多框架自动查找Smsdao时的error日志为info

2.修复在springboot的依赖下,使用smsReadConfig配置会发生渠道级上线拦截器异常的问题
This commit is contained in:
sh1yu 2024-01-12 20:41:45 +08:00
parent b325d2ac0d
commit 6494ea506a
5 changed files with 87 additions and 7 deletions

View File

@ -89,7 +89,7 @@ public abstract class SmsProxyFactory {
if (null != smsDao) {
return smsDao;
}
log.error("尝试框架加载失败最终使用默认SmsDao");
log.info("尝试框架加载失败最终使用默认SmsDao");
return SmsDaoDefaultImpl.getInstance();
}
@ -100,7 +100,7 @@ public abstract class SmsProxyFactory {
Method getSmsDao = clazz.getMethod("getSmsDao", null);
return (SmsDao) getSmsDao.invoke(null, null);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
log.error("{}:加载SmsDao失败尝试其他框架加载......", frameworkName);
log.info("{}:加载SmsDao失败尝试其他框架加载......", frameworkName);
}
return null;
}

View File

@ -52,6 +52,10 @@ public class SingleBlendRestrictedProcessor implements SmsProcessor, SmsDaoAware
String configId = smsBlend.getConfigId();
Map targetConfig = (Map) smsBlendsConfig.get(configId);
Object maximumObj = targetConfig.get("maximum");
if (null == maximumObj) {
log.info("配置信息未能加载到本拦截器,跳过渠道级上限前置拦截执行器");
return param;
}
if (SmsUtils.isEmpty(maximumObj)) {
return param;
}

View File

@ -0,0 +1,41 @@
package org.dromara.sms4j.starter.adepter;
import cn.hutool.core.bean.BeanUtil;
import org.dromara.sms4j.core.datainterface.SmsReadConfig;
import org.dromara.sms4j.provider.config.BaseConfig;
import java.util.*;
public class ConfigCombineMapAdeptor<S, M> extends HashMap {
public M get(Object key) {
Object o = super.get(key);
if (null == o){
Set configKeySet = this.keySet();
for (Object insideMapKey : configKeySet) {
if (((String)insideMapKey).startsWith(SmsReadConfig.class.getSimpleName())){
Map smsBlendsConfigInsideMap = (Map) this.get(insideMapKey);
SmsReadConfig config = (SmsReadConfig) smsBlendsConfigInsideMap.get(insideMapKey);
BaseConfig supplierConfig = config.getSupplierConfig((String)key);
List<BaseConfig> supplierConfigList = config.getSupplierConfigList();
if (null == supplierConfigList){
supplierConfigList = new ArrayList<>();
}
if (null != supplierConfig){
supplierConfigList.add(supplierConfig);
}
for (BaseConfig baseConfig : supplierConfigList) {
if (key.equals(baseConfig.getConfigId())){
Map<String, Object> configMap = BeanUtil.beanToMap(baseConfig);
this.put(baseConfig.getConfigId(),configMap);
return (M)configMap;
}
}
}
}
return null;
}
return (M)o;
}
}

View File

@ -11,6 +11,7 @@ import org.dromara.sms4j.cloopen.config.CloopenFactory;
import org.dromara.sms4j.comm.constant.Constant;
import org.dromara.sms4j.comm.enumerate.ConfigType;
import org.dromara.sms4j.comm.utils.SmsUtils;
import org.dromara.sms4j.core.datainterface.SmsReadConfig;
import org.dromara.sms4j.core.proxy.EnvirmentHolder;
import org.dromara.sms4j.core.factory.SmsFactory;
import org.dromara.sms4j.core.proxy.processor.*;
@ -25,11 +26,14 @@ import org.dromara.sms4j.netease.config.NeteaseFactory;
import org.dromara.sms4j.provider.config.SmsConfig;
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
import org.dromara.sms4j.provider.factory.ProviderFactoryHolder;
import org.dromara.sms4j.starter.adepter.ConfigCombineMapAdeptor;
import org.dromara.sms4j.tencent.config.TencentFactory;
import org.dromara.sms4j.unisms.config.UniFactory;
import org.dromara.sms4j.yunpian.config.YunPianFactory;
import org.dromara.sms4j.zhutong.config.ZhutongFactory;
import org.springframework.beans.factory.ObjectProvider;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -40,14 +44,16 @@ public class SmsBlendsInitializer {
private final SmsConfig smsConfig;
private final Map<String, Map<String, Object>> blends;
private final ObjectProvider<SmsReadConfig> extendsSmsConfigs;
public SmsBlendsInitializer(List<BaseProviderFactory<? extends SmsBlend, ? extends SupplierConfig>> factoryList,
SmsConfig smsConfig,
Map<String, Map<String, Object>> blends
){
Map<String, Map<String, Object>> blends,
ObjectProvider<SmsReadConfig> extendsSmsConfigs){
this.factoryList = factoryList;
this.smsConfig = smsConfig;
this.blends = blends;
this.extendsSmsConfigs = extendsSmsConfigs;
onApplicationEvent();
}
@ -58,7 +64,33 @@ public class SmsBlendsInitializer {
if(ConfigType.YAML.equals(this.smsConfig.getConfigType())) {
//持有初始化配置信息
EnvirmentHolder.frozenEnvirmet(smsConfig, blends);
Map<String, Map<String, Object>> blendsInclude = new ConfigCombineMapAdeptor<String, Map<String, Object>>();
blendsInclude.putAll(this.blends);
int num = 0;
for (SmsReadConfig smsReadConfig : extendsSmsConfigs) {
String key = SmsReadConfig.class.getSimpleName() + num;
Map<String, Object> insideMap = new HashMap<>();
insideMap.put(key,smsReadConfig);
blendsInclude.put(key,insideMap);
num++;
/* BaseConfig supplierConfig = smsReadConfig.getSupplierConfig("");
List<BaseConfig> supplierConfigList = smsReadConfig.getSupplierConfigList();
if(null != supplierConfigList){
supplierConfigList.add(supplierConfig);
for (BaseConfig config : supplierConfigList) {
String key = SmsReadConfig.class.getSimpleName() + num;
Map<String, Object> insideMap = new HashMap<>();
insideMap.put(key,supplierConfig);
blendsInclude.put(key,insideMap);
num++;
}
}else {
if(null != supplierConfig){
}
}*/
}
EnvirmentHolder.frozenEnvirmet(smsConfig, blendsInclude);
//注册执行器实现
SmsProxyFactory.addProcessor(new RestrictedProcessor());
SmsProxyFactory.addProcessor(new BlackListProcessor());

View File

@ -5,8 +5,10 @@ import lombok.SneakyThrows;
import org.dromara.sms4j.api.SmsBlend;
import org.dromara.sms4j.comm.constant.Constant;
import org.dromara.sms4j.comm.enumerate.ConfigType;
import org.dromara.sms4j.core.datainterface.SmsReadConfig;
import org.dromara.sms4j.provider.config.SmsConfig;
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ -53,8 +55,9 @@ public class SupplierConfig {
@Bean
protected SmsBlendsInitializer smsBlendsInitializer(List<BaseProviderFactory<? extends SmsBlend, ? extends org.dromara.sms4j.api.universal.SupplierConfig>> factoryList,
SmsConfig smsConfig,
Map<String, Map<String, Object>> blends) {
return new SmsBlendsInitializer(factoryList, smsConfig, blends);
Map<String, Map<String, Object>> blends,
ObjectProvider<SmsReadConfig> extendsSmsConfigs) {
return new SmsBlendsInitializer(factoryList, smsConfig, blends, extendsSmsConfigs);
}
}