From 2d41f3da4bdc7965f60f70b1d84a3cb23d01433d Mon Sep 17 00:00:00 2001 From: wind Date: Tue, 6 Jun 2023 22:14:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=B8=AARedisUtil?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E7=94=A8=E6=88=B7=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E8=87=AA=E4=B8=BB=E6=94=B9=E5=8F=98redis=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../sms4j/api/universal/RedisUtil.java | 22 +++++++++++++++++++ .../solon/aop/SolonRestrictedProcess.java | 6 ++--- .../dromara/sms4j/solon/utils/RedisUtils.java | 3 ++- .../starter/aop/RestrictedProcessImpl.java | 4 ++-- .../starter/config/SmsAutowiredConfig.java | 6 ++++- .../sms4j/starter/utils/RedisUtils.java | 3 ++- .../sms4j/starter/utils/SpringUtil.java | 9 ++++++++ 8 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 sms4j-api/src/main/java/org/dromara/sms4j/api/universal/RedisUtil.java 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(); + } }