solon的Redis注入加入重试机制

添加一个空接口,用于标定配置类的额外类型
This commit is contained in:
wind 2023-05-16 15:16:29 +08:00
parent d521b0e8d1
commit 0f0c9c06da
13 changed files with 128 additions and 32 deletions

View File

@ -0,0 +1,10 @@
package org.dromara.sms4j.api.universal;
/**
* SupplierConfig
* <p> 空接口无含义只为标定配置类的额外类型
* @author :Wind
* 2023/5/16 15:14
**/
public interface SupplierConfig {
}

View File

@ -6,6 +6,7 @@ import org.dromara.sms4j.comm.enumerate.SupplierType;
import org.dromara.sms4j.comm.utils.JDBCTool; import org.dromara.sms4j.comm.utils.JDBCTool;
import org.dromara.sms4j.comm.utils.SmsUtil; import org.dromara.sms4j.comm.utils.SmsUtil;
import org.dromara.sms4j.core.config.SupplierFactory; import org.dromara.sms4j.core.config.SupplierFactory;
import org.dromara.sms4j.ctyun.config.CtyunConfig;
import org.dromara.sms4j.emay.config.EmayConfig; import org.dromara.sms4j.emay.config.EmayConfig;
import org.dromara.sms4j.huawei.config.HuaweiConfig; import org.dromara.sms4j.huawei.config.HuaweiConfig;
import org.dromara.sms4j.jdcloud.config.JdCloudConfig; import org.dromara.sms4j.jdcloud.config.JdCloudConfig;
@ -48,6 +49,7 @@ public class SupplierSqlConfig {
yunPian(); yunPian();
cloopen(); cloopen();
emay(); emay();
ctyun();
} }
public SupplierSqlConfig() { public SupplierSqlConfig() {
@ -136,4 +138,14 @@ public class SupplierSqlConfig {
EmayConfig emayConfig = SmsUtil.jsonForObject(select.get(SupplierType.EMAY.getName()), EmayConfig.class); EmayConfig emayConfig = SmsUtil.jsonForObject(select.get(SupplierType.EMAY.getName()), EmayConfig.class);
SupplierFactory.setEmayConfig(emayConfig); SupplierFactory.setEmayConfig(emayConfig);
} }
/**
* ctyun
* <p>数据库读取并设置天翼云短信
* @author :Wind
*/
public static void ctyun(){
CtyunConfig ctyunConfig = SmsUtil.jsonForObject(select.get(SupplierType.CTYUN.getName()), CtyunConfig.class);
SupplierFactory.setCtyunConfig(ctyunConfig);
}
} }

View File

@ -12,9 +12,12 @@ import org.dromara.sms4j.tencent.config.TencentConfig;
import org.dromara.sms4j.unisms.config.UniConfig; import org.dromara.sms4j.unisms.config.UniConfig;
import org.dromara.sms4j.yunpian.config.YunpianConfig; import org.dromara.sms4j.yunpian.config.YunpianConfig;
import java.util.Objects;
/** /**
* SupplierFactory * SupplierFactory
* <p> 差异化配置工厂 * <p> 差异化配置工厂
*
* @author :Wind * @author :Wind
* 2023/4/8 15:02 * 2023/4/8 15:02
**/ **/
@ -22,25 +25,39 @@ public class SupplierFactory {
private SupplierFactory() { private SupplierFactory() {
} }
/** 阿里云差异化配置*/ /**
* 阿里云差异化配置
*/
private static AlibabaConfig alibabaConfig; private static AlibabaConfig alibabaConfig;
/** 华为云差异化配置*/ /**
* 华为云差异化配置
*/
private static HuaweiConfig huaweiConfig; private static HuaweiConfig huaweiConfig;
/** 合一短信差异化配置*/ /**
* 合一短信差异化配置
*/
private static UniConfig uniConfig; private static UniConfig uniConfig;
/** 腾讯云短信差异化配置*/ /**
* 腾讯云短信差异化配置
*/
private static TencentConfig tencentConfig; private static TencentConfig tencentConfig;
/** 云片短信差异配置*/ /**
* 云片短信差异配置
*/
private static YunpianConfig yunpianConfig; private static YunpianConfig yunpianConfig;
/** 京东云短信差异配置 */ /**
* 京东云短信差异配置
*/
private static JdCloudConfig jdCloudConfig; private static JdCloudConfig jdCloudConfig;
/** 容联云短信差异配置 */ /**
* 容联云短信差异配置
*/
private static CloopenConfig cloopenConfig; private static CloopenConfig cloopenConfig;
/** /**
@ -53,57 +70,71 @@ public class SupplierFactory {
*/ */
private static CtyunConfig ctyunConfig; private static CtyunConfig ctyunConfig;
/** 阿里云配置获取*/ /**
* 阿里云配置获取
*/
public static AlibabaConfig getAlibabaConfig() { public static AlibabaConfig getAlibabaConfig() {
if (alibabaConfig == null){ if (alibabaConfig == null) {
alibabaConfig = AlibabaConfig.builder().build(); alibabaConfig = AlibabaConfig.builder().build();
} }
return alibabaConfig; return alibabaConfig;
} }
/** 华为云配置获取*/ /**
* 华为云配置获取
*/
public static HuaweiConfig getHuaweiConfig() { public static HuaweiConfig getHuaweiConfig() {
if (huaweiConfig == null){ if (huaweiConfig == null) {
huaweiConfig = HuaweiConfig.builder().build(); huaweiConfig = HuaweiConfig.builder().build();
} }
return huaweiConfig; return huaweiConfig;
} }
/** 合一短信配置获取*/ /**
* 合一短信配置获取
*/
public static UniConfig getUniConfig() { public static UniConfig getUniConfig() {
if (uniConfig == null){ if (uniConfig == null) {
uniConfig = UniConfig.builder().build(); uniConfig = UniConfig.builder().build();
} }
return uniConfig; return uniConfig;
} }
/** 腾讯短信配置获取*/ /**
* 腾讯短信配置获取
*/
public static TencentConfig getTencentConfig() { public static TencentConfig getTencentConfig() {
if (tencentConfig == null){ if (tencentConfig == null) {
tencentConfig = TencentConfig.builder().build(); tencentConfig = TencentConfig.builder().build();
} }
return tencentConfig; return tencentConfig;
} }
/** 云片短信配置获取*/ /**
* 云片短信配置获取
*/
public static YunpianConfig getYunpianConfig() { public static YunpianConfig getYunpianConfig() {
if (yunpianConfig == null){ if (yunpianConfig == null) {
yunpianConfig = YunpianConfig.builder().build(); yunpianConfig = YunpianConfig.builder().build();
} }
return yunpianConfig; return yunpianConfig;
} }
/** 京东云短信配置获取 */ /**
* 京东云短信配置获取
*/
public static JdCloudConfig getJdCloudConfig() { public static JdCloudConfig getJdCloudConfig() {
if (jdCloudConfig == null){ if (jdCloudConfig == null) {
jdCloudConfig = JdCloudConfig.builder().build(); jdCloudConfig = JdCloudConfig.builder().build();
} }
return jdCloudConfig; return jdCloudConfig;
} }
/** 容联云短信配置获取 */ /**
* 容联云短信配置获取
*/
public static CloopenConfig getCloopenConfig() { public static CloopenConfig getCloopenConfig() {
if (cloopenConfig == null){ if (cloopenConfig == null) {
cloopenConfig = CloopenConfig.builder().build(); cloopenConfig = CloopenConfig.builder().build();
} }
return cloopenConfig; return cloopenConfig;
@ -129,6 +160,26 @@ public class SupplierFactory {
return ctyunConfig; return ctyunConfig;
} }
/**
* setSupplierConfig
* <p>通用化set用于设置
* @param t 配置对象
* @author :Wind
*/
public static <T> void setSupplierConfig(T t) {
if (t instanceof AlibabaConfig) {
setAlibabaConfig((AlibabaConfig) t);
} else if (t instanceof HuaweiConfig) {
setHuaweiConfig((HuaweiConfig) t);
} else if (t instanceof UniConfig) {
setUniConfig((UniConfig) t);
} else if (t instanceof TencentConfig) {
setTencentConfig((TencentConfig) t);
} else if (t instanceof YunpianConfig) {
setYunpianConfig((YunpianConfig) t);
}
}
/** /**
* 设置 alibabaConfig * 设置 alibabaConfig
*/ */

View File

@ -5,13 +5,14 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.comm.config.BaseConfig; import org.dromara.sms4j.comm.config.BaseConfig;
@Data @Data
@SuperBuilder @SuperBuilder
@ToString(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class AlibabaConfig extends BaseConfig { public class AlibabaConfig extends BaseConfig implements SupplierConfig {
/** /**
* 模板变量名称 * 模板变量名称

View File

@ -5,6 +5,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.comm.config.BaseConfig; import org.dromara.sms4j.comm.config.BaseConfig;
/** /**
@ -17,7 +18,7 @@ import org.dromara.sms4j.comm.config.BaseConfig;
@SuperBuilder @SuperBuilder
@ToString(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class CloopenConfig extends BaseConfig { public class CloopenConfig extends BaseConfig implements SupplierConfig {
/** /**
* 应用 ID * 应用 ID

View File

@ -5,6 +5,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.comm.config.BaseConfig; import org.dromara.sms4j.comm.config.BaseConfig;
/** /**
@ -18,7 +19,7 @@ import org.dromara.sms4j.comm.config.BaseConfig;
@SuperBuilder @SuperBuilder
@ToString(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class CtyunConfig extends BaseConfig { public class CtyunConfig extends BaseConfig implements SupplierConfig {
/** /**
* 模板变量名称 * 模板变量名称

View File

@ -2,6 +2,7 @@ package org.dromara.sms4j.emay.config;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import org.dromara.sms4j.api.universal.SupplierConfig;
/** /**
* @author Richard * @author Richard
@ -9,7 +10,7 @@ import lombok.Data;
*/ */
@Data @Data
@Builder @Builder
public class EmayConfig { public class EmayConfig implements SupplierConfig {
/** appKey*/ /** appKey*/
private String appId ; private String appId ;
/** appSecret */ /** appSecret */

View File

@ -2,10 +2,11 @@ package org.dromara.sms4j.huawei.config;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import org.dromara.sms4j.api.universal.SupplierConfig;
@Data @Data
@Builder @Builder
public class HuaweiConfig { public class HuaweiConfig implements SupplierConfig {
/** appKey*/ /** appKey*/
private String appKey ; private String appKey ;

View File

@ -5,6 +5,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.comm.config.BaseConfig; import org.dromara.sms4j.comm.config.BaseConfig;
/** /**
@ -17,7 +18,7 @@ import org.dromara.sms4j.comm.config.BaseConfig;
@SuperBuilder @SuperBuilder
@ToString(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class JdCloudConfig extends BaseConfig { public class JdCloudConfig extends BaseConfig implements SupplierConfig {
/** /**
* 地域信息 * 地域信息

View File

@ -5,13 +5,14 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.comm.config.BaseConfig; import org.dromara.sms4j.comm.config.BaseConfig;
@Data @Data
@SuperBuilder @SuperBuilder
@ToString(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class TencentConfig extends BaseConfig { public class TencentConfig extends BaseConfig implements SupplierConfig {
/** /**
* 短信sdkAppId * 短信sdkAppId

View File

@ -5,13 +5,14 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.comm.config.BaseConfig; import org.dromara.sms4j.comm.config.BaseConfig;
@Data @Data
@SuperBuilder @SuperBuilder
@ToString(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class UniConfig extends BaseConfig { public class UniConfig extends BaseConfig implements SupplierConfig {
/** /**
* 是否为简易模式 * 是否为简易模式

View File

@ -5,12 +5,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.comm.config.BaseConfig; import org.dromara.sms4j.comm.config.BaseConfig;
@Data @Data
@SuperBuilder @SuperBuilder
@ToString(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class YunpianConfig extends BaseConfig { public class YunpianConfig extends BaseConfig implements SupplierConfig {
/** /**
* 短信发送后将向这个地址推送(运营商返回的)发送报告 * 短信发送后将向这个地址推送(运营商返回的)发送报告

View File

@ -14,9 +14,23 @@ public class RedisUtils {
private RedissonClient redisTemplate; private RedissonClient redisTemplate;
public RedisUtils() { public RedisUtils() {
Solon.context().getBeanAsync(RedissonClient.class, bean -> { Thread t = new Thread(()->{
redisTemplate = bean; //如果获取到的bean为null则等待后重试最多重试五次
for(int i = 0; i < 5 ;i++){
RedissonClient bean = Solon.context().getBean(RedissonClient.class);
if (Objects.isNull(bean)){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}else{
redisTemplate = bean;
return;
}
}
}); });
t.start();
} }
public RedisUtils(RedissonClient redisTemplate) { public RedisUtils(RedissonClient redisTemplate) {