Browse Source

Merge branch 'tall3' of dd.tall.wiki:ccsens_wiki/ccsenscloud into tall3

tall3
hyy-alt 4 years ago
parent
commit
bff89bd36c
  1. 13
      cloudutil/src/main/java/com/ccsens/cloudutil/annotation/CacheMd5.java
  2. 75
      cloudutil/src/main/java/com/ccsens/cloudutil/aspect/CacheMd5Aspect.java
  3. 2
      cloudutil/src/main/resources/application-util-test.yml
  4. 1
      form/pom.xml
  5. 12
      pom.xml
  6. 2
      signin/src/main/java/com/ccsens/signin/SigninApplication.java
  7. 10
      signin/src/main/java/com/ccsens/signin/api/DebugController.java
  8. 4
      signin/src/main/java/com/ccsens/signin/config/BeanConfig.java
  9. 2
      signin/src/main/java/com/ccsens/signin/config/SpringConfig.java
  10. 2
      signin/src/main/java/com/ccsens/signin/config/SwaggerConfigure.java
  11. 3
      signin/src/main/java/com/ccsens/signin/service/UserService.java
  12. 2
      signin/src/main/resources/application-common.yml
  13. 12
      signin/src/main/resources/application-dev.yml
  14. 5
      signin/src/main/resources/mapper_dao/SysAuthDao.xml
  15. 3
      signin/src/main/resources/mapper_dao/SysUserDao.xml
  16. 1
      signin/src/main/resources/mapper_raw/SysAuthMapper.xml
  17. 1
      signin/src/main/resources/mapper_raw/SysUserInfoMapper.xml
  18. 1
      signin/src/main/resources/mapper_raw/SysUserMapper.xml
  19. 27
      util/src/main/java/com/ccsens/util/CodeError.java
  20. 15
      util/src/main/java/com/ccsens/util/JsonResponse.java
  21. 30
      util/src/main/java/com/ccsens/util/Md5Util.java
  22. 96
      util/src/main/java/com/ccsens/util/config/RedisConfig.java
  23. 7
      util/src/main/java/com/ccsens/util/exception/BaseException.java
  24. 95
      util/src/main/java/com/ccsens/util/mybatis/MybatisRedisCache.java

13
cloudutil/src/main/java/com/ccsens/cloudutil/annotation/CacheMd5.java

@ -0,0 +1,13 @@
package com.ccsens.cloudutil.annotation;
import java.lang.annotation.*;
/**
* @author
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CacheMd5 {
}

75
cloudutil/src/main/java/com/ccsens/cloudutil/aspect/CacheMd5Aspect.java

@ -0,0 +1,75 @@
package com.ccsens.cloudutil.aspect;
import com.alibaba.fastjson.JSONObject;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.Md5Util;
import com.ccsens.util.WebConstant;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
@Slf4j
@Aspect
@Component
public class CacheMd5Aspect {
@Pointcut("@annotation(com.ccsens.cloudutil.annotation.CacheMd5)")
public void cacheMd5(){
}
@Around("cacheMd5()")
public Object cacheMd5TestAspect1(ProceedingJoinPoint joinPoint) throws Throwable {
long s = System.currentTimeMillis();
//拿到入参
Object[] args = joinPoint.getArgs();
HttpServletRequest request = ((ServletRequestAttributes)
RequestContextHolder.getRequestAttributes()).getRequest();
//获取入参的md5值
final String inMd5 = request.getHeader(WebConstant.HEADER_KEY_TOKEN);
//获取返回值
JsonResponse<? extends Object> proceed = (JsonResponse<? extends Object>) joinPoint.proceed(args);
//入参没有md5直接返回
if(inMd5 == null){
log.info("cache---入参md5为空");
long e = System.currentTimeMillis();
log.info("切面时间:{}",e-s);
return proceed;
}
//异常直接返回
if(proceed.getCode() != 200){
log.info("cache---接口异常");
long e = System.currentTimeMillis();
log.info("切面时间:{}",e-s);
return proceed;
}
//获取返回数据
if(proceed.getData() == null){
log.info("cache---返回数据为空");
long e = System.currentTimeMillis();
log.info("切面时间:{}",e-s);
return proceed;
}
//将date转成json并加密
String outMd5 = Md5Util.stringTo(JSONObject.toJSONString(proceed.getData()));
log.info("md5:{}",outMd5);
if(inMd5.equalsIgnoreCase(outMd5)){
log.info("md5相同则返回空");
proceed.setMd5Status(JsonResponse.MD5Status.CHECK_SAME_YES);
proceed.setData(null);
} else {
proceed.setMd5Status(JsonResponse.MD5Status.CHECK_SAME_NO);
}
long e = System.currentTimeMillis();
log.info("切面时间:{}",e-s);
return proceed;
}
}

2
cloudutil/src/main/resources/application-util-test.yml

@ -85,7 +85,7 @@ eureka:
# defaultZone: http://admin:admin@49.232.6.143:7010/eureka/
# defaultZone: http://admin:admin@192.168.0.99:7010/eureka/
defaultZone: http://admin:admin@192.168.4.113:7010/eureka/
defaultZone: http://admin:admin@192.168.0.99:7010/eureka/
# defaultZone: http://admin:admin@192.168.31.13:7010/eureka/
# defaultZone: http://admin:admin@test.tall.wiki:7010/eureka/
instance:

1
form/pom.xml

@ -21,7 +21,6 @@
<version>1.0-SNAPSHOT</version>
</dependency>
<!--util 工具类-->
<dependency>
<groupId>com.ccsens</groupId>
<artifactId>util</artifactId>

12
pom.xml

@ -8,7 +8,7 @@
<modules>
<module>cloudutil</module>
<module>util</module>
<!-- <module>tall</module>-->
<module>tall</module>
<!-- <module>recovery</module>-->
<!-- <module>ht</module>-->
<!-- <module>game</module>-->
@ -56,6 +56,16 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--spring 缓存-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--多redis配置-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>

2
signin/src/main/java/com/ccsens/signin/SigninApplication.java

@ -4,6 +4,7 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableAsync;
@ -15,6 +16,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
@EnableCircuitBreaker
@EnableFeignClients(basePackages = "com.ccsens.cloudutil.feign")
@SpringBootApplication(scanBasePackages = "com.ccsens")
//@EnableCaching
public class SigninApplication {
public static void main(String[] args) {

10
signin/src/main/java/com/ccsens/signin/api/DebugController.java

@ -1,10 +1,13 @@
package com.ccsens.wisdomcar.api;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.WebConstant;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@ -20,8 +23,11 @@ public class DebugController {
@ApiOperation(value = "/测试",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value="",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"})
public JsonResponse debug(HttpServletRequest request) throws Exception {
@RequestMapping(value="",produces = {"application/json;charset=UTF-8"})
// @CachePut(cacheNames = "signin",key = "#clientType+'-'+#identifyType+'-'+#identifier+'-'+#credential")
// @CacheEvict(cacheNames = "signin",key = "#clientType+'-'+#identifyType+'-'+#identifier+'-'+#credential")
public JsonResponse debug(WebConstant.CLIENT_TYPE clientType, WebConstant.IDENTIFY_TYPE identifyType,
String identifier, String credential) throws Exception {
return JsonResponse.newInstance().ok("测试");
}

4
signin/src/main/java/com/ccsens/signin/config/BeanConfig.java

@ -1,6 +1,6 @@
package com.ccsens.wisdomcar.config;
package com.ccsens.signin.config;
import com.ccsens.wisdomcar.intercept.MybatisInterceptor;
import com.ccsens.signin.intercept.MybatisInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

2
signin/src/main/java/com/ccsens/signin/config/SpringConfig.java

@ -1,4 +1,4 @@
package com.ccsens.wisdomcar.config;
package com.ccsens.signin.config;
import cn.hutool.core.lang.Snowflake;

2
signin/src/main/java/com/ccsens/signin/config/SwaggerConfigure.java

@ -1,4 +1,4 @@
package com.ccsens.wisdomcar.config;
package com.ccsens.signin.config;
import com.ccsens.util.WebConstant;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;

3
signin/src/main/java/com/ccsens/signin/service/UserService.java

@ -26,6 +26,7 @@ import com.ccsens.util.wx.WxGzhUtil;
import com.ccsens.util.wx.WxXcxUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@ -71,6 +72,8 @@ public class UserService implements IUserService {
/**
* 登录
*/
// @Cacheable(cacheNames = "signin", key = "#clientType+'-'+#identifyType+'-'+#identifier+'-'+#credential")
// @Cacheable(cacheNames = "signin", key = "login")
@Override
public UserVo.UserSign signin(WebConstant.CLIENT_TYPE clientType, WebConstant.IDENTIFY_TYPE identifyType,
String identifier, String credential, String clientIp, String redirect) throws Exception {

2
signin/src/main/resources/application-common.yml

@ -9,7 +9,7 @@ logging:
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath*:mapper_*/*.xml
type-aliases-package: com.ccsens.ht.bean
type-aliases-package: com.ccsens.signin.bean
server:
tomcat:
uri-encoding: UTF-8

12
signin/src/main/resources/application-dev.yml

@ -27,6 +27,18 @@ spring:
password: ''
port: 6379
timeout: 1000ms
mybatisCache:
database: 1
host: 127.0.0.1
jedis:
pool:
max-active: 200
max-idle: 10
max-wait: -1
min-idle: 0
password: ''
port: 6379
timeout: 1000
swagger:
enable: true

5
signin/src/main/resources/mapper_dao/SysAuthDao.xml

@ -1,6 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.tall.persist.dao.SysAuthDao">
<mapper namespace="com.ccsens.signin.persist.dao.SysAuthDao">
<cache type="com.ccsens.util.mybatis.MybatisRedisCache"/>
<cache-ref namespace="com.ccsens.signin.persist.mapper.SysAuthMapper"/>
<select id="queryOauth2WX" resultType="com.ccsens.signin.bean.vo.UserVo$Oauth2WX">
select identifier as openid, user_id as userId

3
signin/src/main/resources/mapper_dao/SysUserDao.xml

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.tall.persist.dao.SysUserDao">
<mapper namespace="com.ccsens.signin.persist.dao.SysUserDao">
<cache type="com.ccsens.util.mybatis.MybatisRedisCache"/>
<resultMap id="getTokenBeanByUserId" type="com.ccsens.signin.bean.vo.UserVo$TokenBean">
<id column="id" property="id"/>
<result column="account" property="account"/>

1
signin/src/main/resources/mapper_raw/SysAuthMapper.xml

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.signin.persist.mapper.SysAuthMapper">
<cache type="com.ccsens.util.mybatis.MybatisRedisCache"/>
<resultMap id="BaseResultMap" type="com.ccsens.signin.bean.po.SysAuth">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="user_id" jdbcType="BIGINT" property="userId" />

1
signin/src/main/resources/mapper_raw/SysUserInfoMapper.xml

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.signin.persist.mapper.SysUserInfoMapper">
<cache type="com.ccsens.util.mybatis.MybatisRedisCache"/>
<resultMap id="BaseResultMap" type="com.ccsens.signin.bean.po.SysUserInfo">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="user_id" jdbcType="BIGINT" property="userId" />

1
signin/src/main/resources/mapper_raw/SysUserMapper.xml

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.signin.persist.mapper.SysUserMapper">
<cache type="com.ccsens.util.mybatis.MybatisRedisCache"/>
<resultMap id="BaseResultMap" type="com.ccsens.signin.bean.po.SysUser">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="grade_id" jdbcType="BIGINT" property="gradeId" />

27
util/src/main/java/com/ccsens/util/CodeError.java

@ -0,0 +1,27 @@
package com.ccsens.util;
import lombok.Getter;
/**
* @author
*/
public class CodeError {
public static final Code SUCCESS = new Code(200, "ok", true);
public static final Code SYS_ERROR = new Code(500, "网络繁忙,请您稍后重试", false);
public static final Code THIRD_ERROR = new Code(-1, "调用第三方刚接口异常", false);
@Getter
public static class Code{
private Integer code;
private String msg;
private boolean success;
public Code(Integer code, String msg, boolean success) {
this.code = code;
this.msg = msg;
this.success = success;
}
}
}

15
util/src/main/java/com/ccsens/util/JsonResponse.java

@ -46,6 +46,14 @@ public class JsonResponse<T> {
private String msg;
@ApiModelProperty(value="成功与否")
private boolean success;
@ApiModelProperty(value = "md5校验状态 0:未校验 1:校验一致 2:校验不一致")
private byte md5Status = 0;
public static class MD5Status{
public final static byte UNCHECK = 0;
public final static byte CHECK_SAME_YES = 1;
public final static byte CHECK_SAME_NO = 2;
}
private JsonResponse() {
}
@ -85,6 +93,13 @@ public class JsonResponse<T> {
return this;
}
public JsonResponse ok(CodeError.Code code){
this.code = code.getCode();
this.msg = code.getMsg();
this.success = code.isSuccess();
return this;
}
public JsonResponse fail(){
this.code = RegularError.ERRCODE_FAIL;
this.msg = RegularError.ERRCODE_FAIL_PHASE;

30
util/src/main/java/com/ccsens/util/Md5Util.java

@ -59,6 +59,36 @@ public class Md5Util {
return str;
}
public static String stringTo(String plainText) {
try {
//生成实现指定摘要算法的 MessageDigest 对象。
MessageDigest md = MessageDigest.getInstance("MD5");
//使用指定的字节数组更新摘要。
md.update(plainText.getBytes());
//通过执行诸如填充之类的最终操作完成哈希计算。
byte b[] = md.digest();
//生成具体的md5密码到buf数组
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0) {
i += 256;
}
if (i < 16) {
buf.append("0");
}
buf.append(Integer.toHexString(i));
}
return buf.toString();
// System.out.println("32位: " + buf.toString());// 32位的加密
// System.out.println("16位: " + buf.toString().substring(8, 24));// 16位的加密,其实就是32位加密后的截取
}
catch (Exception e) {
e.printStackTrace();
}
return "";
}
// public static void main(String args[]) {
// String path = "D:\\home\\btpro\\uploads\\delivers\\20190509\\fc3d9e330c75414d96ebadaac0294fdc.pdf";

96
util/src/main/java/com/ccsens/util/config/RedisConfig.java

@ -3,16 +3,46 @@ package com.ccsens.util.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
/**
* @author 23778
*/
@Configuration
public class RedisConfig {
@Value("${mybatisCache.host:}")
private String hostName;
@Value("${mybatisCache.password:}")
private String password;
@Value("${mybatisCache.port:}")
private int port;
@Value("${mybatisCache.database:}")
private int database;
@Value("${mybatisCache.timeout:}")
private int timeout;
@Value("${mybatisCache.jedis.pool.max-active:}")
private int maxActive;
@Value("${mybatisCache.jedis.pool.max-idle:}")
private int maxIdle;
@Value("${mybatisCache.jedis.pool.min-idle:}")
private int minIdle;
@Value("${mybatisCache.jedis.pool.max-wait:}")
private long maxWait;
@Bean
@SuppressWarnings("all")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
@ -35,4 +65,70 @@ public class RedisConfig {
template.afterPropertiesSet();
return template;
}
@Bean("mybatisCache")
@SuppressWarnings("all")
public RedisTemplate<Object, Object> mybatisCacheRedisTemplate() {
RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
RedisConnectionFactory factory = this.getRedisConnectionFactory();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
/**
* 负责建立Factory的连接工厂类
* @return
*/
private RedisConnectionFactory getRedisConnectionFactory() {
JedisConnectionFactory jedisFactory = new JedisConnectionFactory();
jedisFactory.setHostName(hostName);
jedisFactory.setPort(port);
jedisFactory.setPassword(password);
jedisFactory.setDatabase(database);
jedisFactory.setTimeout(timeout);
// 进行连接池配置
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxWaitMillis(maxWait);
jedisFactory.setPoolConfig(poolConfig);
// 初始化连接池配置
jedisFactory.afterPropertiesSet();
return jedisFactory;
}
@Bean
public RedisCacheManager redisCacheManager() {
RedisConnectionFactory factory = getRedisConnectionFactory();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.entryTtl(Duration.ofSeconds(300));
RedisCacheManager redisCacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
.transactionAware()
.build();
return redisCacheManager;
}
}

7
util/src/main/java/com/ccsens/util/exception/BaseException.java

@ -1,12 +1,14 @@
package com.ccsens.util.exception;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.CodeError;
import lombok.Getter;
@Getter
public class BaseException extends RuntimeException {
private Integer code;
private CodeEnum codeEnum;
private CodeError.Code codeError;
private String operation;
public BaseException(String message){
@ -25,6 +27,11 @@ public class BaseException extends RuntimeException {
this.codeEnum = codeEnum;
}
public BaseException(CodeError.Code code) {
super(code.getMsg());
this.code = code.getCode();
this.codeError = code;
}
public BaseException(){
}

95
util/src/main/java/com/ccsens/util/mybatis/MybatisRedisCache.java

@ -0,0 +1,95 @@
package com.ccsens.util.mybatis;
import com.ccsens.util.SpringContextUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.cache.Cache;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* @description:
* @author: whj
* @time: 2021/7/19 16:48
*/
@Slf4j
public class MybatisRedisCache implements Cache {
private final String id;
private RedisTemplate redisTemplate;
/** redis过期时间 单位:s */
private static final long EXPIRE_TIME_IN_MINUTES = 300;
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
public MybatisRedisCache(String id) {
if (id == null) {
throw new IllegalArgumentException("Cache instances require an ID");
}
this.id = id;
log.debug("创建了mybatis的redis缓存"+id);
}
@Override
public String getId() {
return id;
}
@Override
public void putObject(Object key, Object value) {
if (key == null) {
return ;
}
RedisTemplate<Object, Object> redisTemplate = getRedisTemplate();
redisTemplate.opsForValue().set(key, value, EXPIRE_TIME_IN_MINUTES, TimeUnit.SECONDS);
}
@Override
public Object getObject(Object key) {
if (key == null) {
return null;
}
RedisTemplate<Object, Object> redisTemplate = getRedisTemplate();
return redisTemplate.opsForValue().get(key);
}
@Override
public Object removeObject(Object key) {
if (key == null) {
return false;
}
RedisTemplate<Object, Object> redisTemplate = getRedisTemplate();
return redisTemplate.delete(key);
}
@Override
public void clear() {
RedisTemplate<Object, Object> redisTemplate = getRedisTemplate();
redisTemplate.execute((RedisCallback<Object>) connection -> {
//将数据库清空
connection.flushDb();
return null;
});
}
@Override
public int getSize() {
return 0;
}
@Override
public ReadWriteLock getReadWriteLock() {
return readWriteLock;
}
private RedisTemplate<Object, Object> getRedisTemplate() {
if (redisTemplate == null) {
redisTemplate = SpringContextUtils.getBean("mybatisCache", RedisTemplate.class);
}
return redisTemplate;
}
}
Loading…
Cancel
Save