添加一个RedisUtil接口,用户可以自主改变redis实现方式

This commit is contained in:
wind 2023-06-06 22:14:18 +08:00
parent cc45b7974b
commit 2d41f3da4b
8 changed files with 46 additions and 9 deletions

View File

@ -48,7 +48,7 @@
</scm> </scm>
<properties> <properties>
<revision>2.1.0-SNAPSHOT</revision> <revision>2.2.0-SNAPSHOT</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

View File

@ -0,0 +1,22 @@
package org.dromara.sms4j.api.universal;
public interface RedisUtil {
/**
* setOrTime
* <p>设置带有过期时间的key
* @param key redis的key
* @param value redis 的value
* @param time 过期时间秒级单位
* @author :Wind
*/
public boolean setOrTime(String key, Object value, Long time);
/**
* getByKey
* <p>根据key获取redis中缓存的数据
* @param key redis的key
* @author :Wind
*/
public Object getByKey(String key);
}

View File

@ -2,22 +2,22 @@ package org.dromara.sms4j.solon.aop;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.sms4j.api.smsProxy.RestrictedProcess; 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.config.SmsConfig;
import org.dromara.sms4j.comm.exception.SmsBlendException; import org.dromara.sms4j.comm.exception.SmsBlendException;
import org.dromara.sms4j.comm.utils.SmsUtil; import org.dromara.sms4j.comm.utils.SmsUtil;
import org.dromara.sms4j.solon.utils.RedisUtils;
import org.noear.solon.core.AopContext; import org.noear.solon.core.AopContext;
@Slf4j @Slf4j
public class SolonRestrictedProcess extends RestrictedProcess { public class SolonRestrictedProcess extends RestrictedProcess {
private RedisUtils redis; private RedisUtil redis;
private static final Long minTimer = 60 * 1000L; private static final Long minTimer = 60 * 1000L;
private static final Long accTimer = 24 * 60 * 60 * 1000L; private static final Long accTimer = 24 * 60 * 60 * 1000L;
private static final String REDIS_KEY = "sms:restricted:"; private static final String REDIS_KEY = "sms:restricted:";
public SolonRestrictedProcess(AopContext context){ public SolonRestrictedProcess(AopContext context){
context.getBeanAsync(RedisUtils.class, bean->{ context.getBeanAsync(RedisUtil.class, bean->{
redis = bean; redis = bean;
}); });
} }

View File

@ -1,6 +1,7 @@
package org.dromara.sms4j.solon.utils; package org.dromara.sms4j.solon.utils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.sms4j.api.universal.RedisUtil;
import org.noear.solon.Solon; import org.noear.solon.Solon;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
@ -9,7 +10,7 @@ import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
public class RedisUtils { public class RedisUtils implements RedisUtil {
private RedissonClient redisTemplate; private RedissonClient redisTemplate;

View File

@ -5,7 +5,7 @@ import org.dromara.sms4j.api.smsProxy.RestrictedProcess;
import org.dromara.sms4j.comm.config.SmsConfig; import org.dromara.sms4j.comm.config.SmsConfig;
import org.dromara.sms4j.comm.exception.SmsBlendException; import org.dromara.sms4j.comm.exception.SmsBlendException;
import org.dromara.sms4j.comm.utils.SmsUtil; 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 org.dromara.sms4j.starter.utils.SpringUtil;
import java.util.Objects; import java.util.Objects;
@ -19,7 +19,7 @@ public class RestrictedProcessImpl extends RestrictedProcess {
@Override @Override
public SmsBlendException process(SmsConfig config,String args) throws Exception { 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)){ if (Objects.isNull(redis)){
throw new SmsBlendException("The redis tool could not be found"); throw new SmsBlendException("The redis tool could not be found");
} }

View File

@ -10,6 +10,7 @@ import org.dromara.sms4j.comm.delayedTime.DelayedTime;
import org.dromara.sms4j.comm.factory.BeanFactory; import org.dromara.sms4j.comm.factory.BeanFactory;
import org.dromara.sms4j.core.SupplierSqlConfig; import org.dromara.sms4j.core.SupplierSqlConfig;
import org.dromara.sms4j.starter.aop.RestrictedProcessImpl; 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.ConfigUtil;
import org.dromara.sms4j.starter.utils.RedisUtils; import org.dromara.sms4j.starter.utils.RedisUtils;
import org.dromara.sms4j.starter.utils.SpringUtil; import org.dromara.sms4j.starter.utils.SpringUtil;
@ -76,7 +77,10 @@ public class SmsAutowiredConfig {
void init(){ void init(){
/* 如果配置中启用了redis则注入redis工具*/ /* 如果配置中启用了redis则注入redis工具*/
if (BeanFactory.getSmsConfig().getRedisCache()){ if (BeanFactory.getSmsConfig().getRedisCache()){
springUtil.createBean(RedisUtils.class); //如果用户没有实现RedisUtil接口则注入默认的实现
if (!SpringUtil.interfaceExist(RedisUtil.class)){
springUtil.createBean(RedisUtils.class);
}
SmsInvocationHandler.setRestrictedProcess(new RestrictedProcessImpl()); SmsInvocationHandler.setRestrictedProcess(new RestrictedProcessImpl());
log.debug("The redis cache is enabled for sms4j"); log.debug("The redis cache is enabled for sms4j");
} }

View File

@ -1,6 +1,7 @@
package org.dromara.sms4j.starter.utils; package org.dromara.sms4j.starter.utils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.sms4j.api.universal.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
@ -13,7 +14,7 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
public class RedisUtils { public class RedisUtils implements RedisUtil {
private RedisTemplate<String, Object> redisTemplate; private RedisTemplate<String, Object> redisTemplate;

View File

@ -90,4 +90,13 @@ public class SpringUtil implements ApplicationContextAware {
public void deleteBean(String beanName) { public void deleteBean(String beanName) {
beanFactory.removeBeanDefinition(beanName); beanFactory.removeBeanDefinition(beanName);
} }
/**
* interfaceExist
* <p>判断容器中是否存在某类型的bean
* @author :Wind
*/
public static boolean interfaceExist(Class<?>interfaceType) {
return !applicationContext.getBeansOfType(interfaceType).isEmpty();
}
} }