diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/factory/SmsFactory.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/factory/SmsFactory.java
index a653143e..69f30be6 100644
--- a/sms4j-core/src/main/java/org/dromara/sms4j/core/factory/SmsFactory.java
+++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/factory/SmsFactory.java
@@ -5,6 +5,7 @@ import org.dromara.sms4j.api.smsProxy.SmsInvocationHandler;
import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.comm.factory.BeanFactory;
import org.dromara.sms4j.core.SupplierSqlConfig;
+import org.dromara.sms4j.core.load.SmsLoad;
import org.dromara.sms4j.provider.base.BaseProviderFactory;
import org.dromara.sms4j.provider.enumerate.SupplierType;
@@ -53,6 +54,15 @@ public abstract class SmsFactory {
return providerFactory.createMultitonSms(config);
}
+ /**
+ * createSmsBlend
+ *
获取负载均衡器中的短信实例
+ * @author :Wind
+ */
+ public static SmsBlend createSmsBlend(){
+ return SmsLoad.getBeanLoad().getLoadServer();
+ }
+
/**
* refresh
*
刷新配置,用于切换配置后的刷新,防止因厂商sdk内部的保存导致配置更新不及时
diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/load/SmsLoad.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/load/SmsLoad.java
index aa7a9d97..8255550e 100644
--- a/sms4j-core/src/main/java/org/dromara/sms4j/core/load/SmsLoad.java
+++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/load/SmsLoad.java
@@ -21,14 +21,20 @@ import java.util.Map;
**/
public class SmsLoad {
// 服务器列表,每个服务器有一个权重和当前权重
- private static final List LoadServers = new ArrayList<>();
+ private final List LoadServers = new ArrayList<>();
// 实例列表
private static final Map smsBlendMap = new HashMap<>();
+ private static final SmsLoad smsLoad = new SmsLoad();
+
private SmsLoad() {
}
+ public static SmsLoad newSmsLoad() {
+ return new SmsLoad();
+ }
+
/**
* addLoadServer
* 添加服务及其权重
@@ -37,7 +43,7 @@ public class SmsLoad {
* @param weight 权重
* @author :Wind
*/
- public static void addLoadServer(SmsBlend LoadServer, int weight) {
+ public void addLoadServer(SmsBlend LoadServer, int weight) {
LoadServers.add(new LoadServer(LoadServer, weight, weight));
}
@@ -47,7 +53,7 @@ public class SmsLoad {
* @param LoadServer 要移除的服务
* @author :Wind
*/
- public static void removeLoadServer(SmsBlend LoadServer) {
+ public void removeLoadServer(SmsBlend LoadServer) {
for (int i = 0; i < LoadServers.size(); i++) {
if (LoadServers.get(i).getSmsServer().equals(LoadServer)) {
LoadServers.remove(i);
@@ -62,7 +68,7 @@ public class SmsLoad {
* @return SmsBlend 短信实现
* @author :Wind
*/
- public synchronized static SmsBlend getLoadServer() {
+ public synchronized SmsBlend getLoadServer() {
int totalWeight = 0;
LoadServer selectedLoadServer = null;
// 计算所有服务器的权重总和,并选择当前权重最大的服务器
@@ -94,7 +100,11 @@ public class SmsLoad {
public static void starConfig(SupplierConfig supplierConfig, SupplierType supplierType){
BaseProviderFactory providerFactory = supplierType.getProviderFactory();
SmsBlend smsBlend = providerFactory.createMultitonSms(supplierConfig);
- addLoadServer(smsBlend, Integer.parseInt(ReflectUtil.getValues(supplierConfig).get("weight")));
+ smsLoad.addLoadServer(smsBlend, Integer.parseInt(ReflectUtil.getValues(supplierConfig).get("weight")));
+ }
+
+ public static SmsLoad getBeanLoad(){
+ return smsLoad;
}
}
diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsAutowiredConfig.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsAutowiredConfig.java
index 556e8ebc..be5513d1 100644
--- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsAutowiredConfig.java
+++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsAutowiredConfig.java
@@ -10,6 +10,7 @@ import org.dromara.sms4j.comm.constant.Constant;
import org.dromara.sms4j.comm.delayedTime.DelayedTime;
import org.dromara.sms4j.comm.factory.BeanFactory;
import org.dromara.sms4j.core.SupplierSqlConfig;
+import org.dromara.sms4j.core.config.SupplierFactory;
import org.dromara.sms4j.starter.aop.RestrictedProcessImpl;
import org.dromara.sms4j.starter.utils.ConfigUtil;
import org.dromara.sms4j.starter.utils.SmsRedisUtils;
@@ -25,6 +26,7 @@ import org.springframework.data.redis.connection.RedisConnectionFactory;
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.sql.SQLException;
+import java.util.Map;
import java.util.Objects;
import java.util.concurrent.Executor;
@@ -95,6 +97,11 @@ public class SmsAutowiredConfig {
SmsInvocationHandler.setRestrictedProcess(new RestrictedProcessImpl());
log.debug("The redis cache is enabled for sms4j");
}
+ // 将spring中存在的所有配置,设置到配置工厂,并添加至负载均衡器
+ Map beansOfType = SmsSpringUtil.getBeansOfType(org.dromara.sms4j.api.universal.SupplierConfig.class);
+ for (org.dromara.sms4j.api.universal.SupplierConfig s : beansOfType.values()) {
+ SupplierFactory.setSupplierConfig(s);
+ }
//打印banner
if (BeanFactory.getSmsConfig().getIsPrint()){
SmsBanner.PrintBanner(Constant.VERSION);
diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java
index 9e0c6428..6f7d3700 100644
--- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java
+++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java
@@ -8,6 +8,7 @@ import org.dromara.sms4j.emay.config.EmayConfig;
import org.dromara.sms4j.huawei.config.HuaweiConfig;
import org.dromara.sms4j.jdcloud.config.JdCloudConfig;
import org.dromara.sms4j.netease.config.NeteaseConfig;
+import org.dromara.sms4j.starter.utils.SmsSpringUtil;
import org.dromara.sms4j.tencent.config.TencentConfig;
import org.dromara.sms4j.unisms.config.UniConfig;
import org.dromara.sms4j.yunpian.config.YunpianConfig;
@@ -17,6 +18,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import javax.annotation.PostConstruct;
+import java.util.Map;
public class SupplierConfig {
@@ -117,9 +119,4 @@ public class SupplierConfig {
protected ZhutongConfig zhutongConfig(){
return SupplierFactory.getZhutongConfig();
}
-
- @PostConstruct
- protected void init(){
-
- }
}
diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SmsSpringUtil.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SmsSpringUtil.java
index 50989b82..53779d98 100644
--- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SmsSpringUtil.java
+++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SmsSpringUtil.java
@@ -102,7 +102,7 @@ public class SmsSpringUtil implements ApplicationContextAware {
return !applicationContext.getBeansOfType(interfaceType).isEmpty();
}
- public Map getBeansOfType(Class interfaceType) {
+ public static Map getBeansOfType(Class interfaceType) {
return applicationContext.getBeansOfType(interfaceType);
}
}