修改configType设置为yaml,没有正确初始化全局配置的问题

This commit is contained in:
heng 2023-10-10 14:38:58 +08:00
parent 5ec641c35d
commit e2fde737bf
2 changed files with 32 additions and 28 deletions

View File

@ -9,6 +9,7 @@ import org.dromara.sms4j.api.SmsBlend;
import org.dromara.sms4j.api.universal.SupplierConfig; import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.cloopen.config.CloopenFactory; import org.dromara.sms4j.cloopen.config.CloopenFactory;
import org.dromara.sms4j.comm.constant.Constant; 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.comm.utils.SmsUtils;
import org.dromara.sms4j.core.factory.SmsFactory; import org.dromara.sms4j.core.factory.SmsFactory;
import org.dromara.sms4j.core.proxy.SmsInvocationHandler; import org.dromara.sms4j.core.proxy.SmsInvocationHandler;
@ -51,25 +52,27 @@ public class SmsBlendsInitializer {
this.registerDefaultFactory(); this.registerDefaultFactory();
// 注册短信对象工厂 // 注册短信对象工厂
ProviderFactoryHolder.registerFactory(factoryList); ProviderFactoryHolder.registerFactory(factoryList);
// 解析供应商配置 if(ConfigType.YAML.equals(this.smsConfig.getConfigType())) {
for(String configId : blends.keySet()) { // 解析供应商配置
Map<String, Object> configMap = blends.get(configId); for(String configId : blends.keySet()) {
Object supplierObj = configMap.get(Constant.SUPPLIER_KEY); Map<String, Object> configMap = blends.get(configId);
String supplier = supplierObj == null ? "" : String.valueOf(supplierObj); Object supplierObj = configMap.get(Constant.SUPPLIER_KEY);
supplier = StrUtil.isEmpty(supplier) ? configId : supplier; String supplier = supplierObj == null ? "" : String.valueOf(supplierObj);
BaseProviderFactory<SmsBlend, SupplierConfig> providerFactory = (BaseProviderFactory<SmsBlend, org.dromara.sms4j.api.universal.SupplierConfig>) ProviderFactoryHolder.requireForSupplier(supplier); supplier = StrUtil.isEmpty(supplier) ? configId : supplier;
if(providerFactory == null) { BaseProviderFactory<SmsBlend, SupplierConfig> providerFactory = (BaseProviderFactory<SmsBlend, org.dromara.sms4j.api.universal.SupplierConfig>) ProviderFactoryHolder.requireForSupplier(supplier);
log.warn("创建\"{}\"的短信服务失败,未找到供应商为\"{}\"的服务", configId, supplier); if(providerFactory == null) {
continue; log.warn("创建\"{}\"的短信服务失败,未找到供应商为\"{}\"的服务", configId, supplier);
} continue;
configMap.put("config-id", configId); }
SmsUtils.replaceKeysSeperator(configMap, "-", "_"); configMap.put("config-id", configId);
JSONObject configJson = new JSONObject(configMap); SmsUtils.replaceKeysSeperator(configMap, "-", "_");
org.dromara.sms4j.api.universal.SupplierConfig supplierConfig = JSONUtil.toBean(configJson, providerFactory.getConfigClass()); JSONObject configJson = new JSONObject(configMap);
if(Boolean.TRUE.equals(smsConfig.getRestricted())) { org.dromara.sms4j.api.universal.SupplierConfig supplierConfig = JSONUtil.toBean(configJson, providerFactory.getConfigClass());
SmsFactory.createRestrictedSmsBlend(supplierConfig); if(Boolean.TRUE.equals(smsConfig.getRestricted())) {
} else { SmsFactory.createRestrictedSmsBlend(supplierConfig);
SmsFactory.createSmsBlend(supplierConfig); } else {
SmsFactory.createSmsBlend(supplierConfig);
}
} }
} }

View File

@ -13,21 +13,22 @@ import java.util.Map;
public class SupplierConfig { public class SupplierConfig {
/** 注入配置*/ /**
* 注入配置
*/
@Bean @Bean
@ConfigurationProperties(prefix = "sms.blends") @ConfigurationProperties(prefix = "sms.blends")
@ConditionalOnProperty(prefix = "sms", name = "config-type", havingValue = "yaml") @ConditionalOnProperty(prefix = "sms", name = "config-type", havingValue = "yaml")
protected Map<String, Map<String, Object>> blends(){ protected Map<String, Map<String, Object>> blends() {
return new LinkedHashMap<>(); return new LinkedHashMap<>();
} }
@Bean @Bean
@ConditionalOnProperty(prefix = "sms", name = "config-type", havingValue = "yaml") protected SmsBlendsInitializer smsBlendsInitializer(List<BaseProviderFactory<? extends SmsBlend, ? extends org.dromara.sms4j.api.universal.SupplierConfig>> factoryList,
protected SmsBlendsInitializer smsBlendsInitializer(List<BaseProviderFactory<? extends SmsBlend, ? extends org.dromara.sms4j.api.universal.SupplierConfig>> factoryList, SmsConfig smsConfig,
SmsConfig smsConfig, Map<String, Map<String, Object>> blends) {
Map<String, Map<String, Object>> blends){ return new SmsBlendsInitializer(factoryList, smsConfig, blends);
return new SmsBlendsInitializer(factoryList,smsConfig,blends); }
}
} }