diff --git a/pom.xml b/pom.xml index 2ac3bf7e..05be5579 100644 --- a/pom.xml +++ b/pom.xml @@ -48,7 +48,7 @@ - 2.1.0-SNAPSHOT + 2.2.0-SNAPSHOT UTF-8 UTF-8 diff --git a/sms4j-api/src/main/java/org/dromara/sms4j/api/universal/RedisUtil.java b/sms4j-api/src/main/java/org/dromara/sms4j/api/universal/RedisUtil.java new file mode 100644 index 00000000..def826b0 --- /dev/null +++ b/sms4j-api/src/main/java/org/dromara/sms4j/api/universal/RedisUtil.java @@ -0,0 +1,22 @@ +package org.dromara.sms4j.api.universal; + +public interface RedisUtil { + + /** + * setOrTime + *

设置带有过期时间的key + * @param key redis的key + * @param value redis 的value + * @param time 过期时间(秒级单位) + * @author :Wind + */ + public boolean setOrTime(String key, Object value, Long time); + + /** + * getByKey + *

根据key获取redis中缓存的数据 + * @param key redis的key + * @author :Wind + */ + public Object getByKey(String key); +} diff --git a/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/aop/SolonRestrictedProcess.java b/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/aop/SolonRestrictedProcess.java index fb01f245..ed590a2b 100644 --- a/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/aop/SolonRestrictedProcess.java +++ b/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/aop/SolonRestrictedProcess.java @@ -2,22 +2,22 @@ package org.dromara.sms4j.solon.aop; import lombok.extern.slf4j.Slf4j; import org.dromara.sms4j.api.smsProxy.RestrictedProcess; +import org.dromara.sms4j.api.universal.RedisUtil; import org.dromara.sms4j.comm.config.SmsConfig; import org.dromara.sms4j.comm.exception.SmsBlendException; import org.dromara.sms4j.comm.utils.SmsUtil; -import org.dromara.sms4j.solon.utils.RedisUtils; import org.noear.solon.core.AopContext; @Slf4j public class SolonRestrictedProcess extends RestrictedProcess { - private RedisUtils redis; + private RedisUtil redis; private static final Long minTimer = 60 * 1000L; private static final Long accTimer = 24 * 60 * 60 * 1000L; private static final String REDIS_KEY = "sms:restricted:"; public SolonRestrictedProcess(AopContext context){ - context.getBeanAsync(RedisUtils.class, bean->{ + context.getBeanAsync(RedisUtil.class, bean->{ redis = bean; }); } diff --git a/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/utils/RedisUtils.java b/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/utils/RedisUtils.java index 70f9b8ec..f3151bc6 100644 --- a/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/utils/RedisUtils.java +++ b/sms4j-solon-plugin/src/main/java/org/dromara/sms4j/solon/utils/RedisUtils.java @@ -1,6 +1,7 @@ package org.dromara.sms4j.solon.utils; import lombok.extern.slf4j.Slf4j; +import org.dromara.sms4j.api.universal.RedisUtil; import org.noear.solon.Solon; import org.redisson.api.RedissonClient; @@ -9,7 +10,7 @@ import java.util.Objects; import java.util.concurrent.TimeUnit; @Slf4j -public class RedisUtils { +public class RedisUtils implements RedisUtil { private RedissonClient redisTemplate; diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/aop/RestrictedProcessImpl.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/aop/RestrictedProcessImpl.java index 2ff9a815..02fb95c1 100644 --- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/aop/RestrictedProcessImpl.java +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/aop/RestrictedProcessImpl.java @@ -5,7 +5,7 @@ import org.dromara.sms4j.api.smsProxy.RestrictedProcess; import org.dromara.sms4j.comm.config.SmsConfig; import org.dromara.sms4j.comm.exception.SmsBlendException; import org.dromara.sms4j.comm.utils.SmsUtil; -import org.dromara.sms4j.starter.utils.RedisUtils; +import org.dromara.sms4j.api.universal.RedisUtil; import org.dromara.sms4j.starter.utils.SpringUtil; import java.util.Objects; @@ -19,7 +19,7 @@ public class RestrictedProcessImpl extends RestrictedProcess { @Override public SmsBlendException process(SmsConfig config,String args) throws Exception { - RedisUtils redis = SpringUtil.getBean(RedisUtils.class); + RedisUtil redis = SpringUtil.getBean(RedisUtil.class); if (Objects.isNull(redis)){ throw new SmsBlendException("The redis tool could not be found"); } 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 5b1860d6..ae2b5186 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.delayedTime.DelayedTime; import org.dromara.sms4j.comm.factory.BeanFactory; import org.dromara.sms4j.core.SupplierSqlConfig; import org.dromara.sms4j.starter.aop.RestrictedProcessImpl; +import org.dromara.sms4j.api.universal.RedisUtil; import org.dromara.sms4j.starter.utils.ConfigUtil; import org.dromara.sms4j.starter.utils.RedisUtils; import org.dromara.sms4j.starter.utils.SpringUtil; @@ -76,7 +77,10 @@ public class SmsAutowiredConfig { void init(){ /* 如果配置中启用了redis,则注入redis工具*/ if (BeanFactory.getSmsConfig().getRedisCache()){ - springUtil.createBean(RedisUtils.class); + //如果用户没有实现RedisUtil接口则注入默认的实现 + if (!SpringUtil.interfaceExist(RedisUtil.class)){ + springUtil.createBean(RedisUtils.class); + } SmsInvocationHandler.setRestrictedProcess(new RestrictedProcessImpl()); log.debug("The redis cache is enabled for sms4j"); } diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/RedisUtils.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/RedisUtils.java index e5ae4b54..2b96114c 100644 --- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/RedisUtils.java +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/RedisUtils.java @@ -1,6 +1,7 @@ package org.dromara.sms4j.starter.utils; import lombok.extern.slf4j.Slf4j; +import org.dromara.sms4j.api.universal.RedisUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; @@ -13,7 +14,7 @@ import java.util.concurrent.TimeUnit; @Slf4j -public class RedisUtils { +public class RedisUtils implements RedisUtil { private RedisTemplate redisTemplate; diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SpringUtil.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SpringUtil.java index 28fc6809..abd97ae6 100644 --- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SpringUtil.java +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SpringUtil.java @@ -90,4 +90,13 @@ public class SpringUtil implements ApplicationContextAware { public void deleteBean(String beanName) { beanFactory.removeBeanDefinition(beanName); } + + /** + * interfaceExist + *

判断容器中是否存在某类型的bean + * @author :Wind + */ + public static boolean interfaceExist(ClassinterfaceType) { + return !applicationContext.getBeansOfType(interfaceType).isEmpty(); + } }