Browse Source

mybatis cache

tall3
zhizhi wu 4 years ago
parent
commit
910a2f1538
  1. 5
      pom.xml
  2. 4
      signin/src/main/java/com/ccsens/signin/config/BeanConfig.java
  3. 2
      signin/src/main/java/com/ccsens/signin/config/SpringConfig.java
  4. 2
      signin/src/main/java/com/ccsens/signin/config/SwaggerConfigure.java
  5. 14
      signin/src/main/resources/application-dev.yml
  6. 2
      signin/src/main/resources/mapper_dao/SysAuthDao.xml
  7. 64
      util/src/main/java/com/ccsens/util/config/RedisConfig.java
  8. 76
      util/src/main/java/com/ccsens/util/mybatis/MybatisRedisCache.java

5
pom.xml

@ -55,6 +55,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--多redis配置-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>

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;

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

@ -11,7 +11,7 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
rabbitmq:
host: 192.168.0.99
host: 192.168.4.113
password: 111111
port: 5672
username: admin
@ -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

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

@ -2,6 +2,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">
<cache type="com.ccsens.util.mybatis.MybatisRedisCache"/>
<select id="queryOauth2WX" resultType="com.ccsens.signin.bean.vo.UserVo$Oauth2WX">
select identifier as openid, user_id as userId
from t_sys_auth

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

@ -3,12 +3,17 @@ 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.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.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
@Configuration
public class RedisConfig {
@ -35,4 +40,63 @@ public class RedisConfig {
template.afterPropertiesSet();
return template;
}
@Bean("mybatisCache")
@SuppressWarnings("all")
public RedisTemplate<String, Object> mybatisCacheRedisTemplate(
@Value("${mybatisCache.host:}") String hostName,
@Value("${mybatisCache.password:}") String password,
@Value("${mybatisCache.port:}") int port,
@Value("${mybatisCache.database:}") int database,
@Value("${mybatisCache.timeout:}") int timeout,
@Value("${mybatisCache.jedis.pool.max-active:}") int maxActive,
@Value("${mybatisCache.jedis.pool.max-idle:}") int maxIdle,
@Value("${mybatisCache.jedis.pool.min-idle:}") int minIdle,
@Value("${mybatisCache.jedis.pool.max-wait:}") long maxWait
) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
RedisConnectionFactory factory = this.getRedisConnectionFactory(
hostName, password, port, database, timeout, maxActive, maxIdle, minIdle, maxWait);
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);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
private RedisConnectionFactory getRedisConnectionFactory(String hostName,
String password, int port, int database, int timeout, int maxActive, int maxIdle, int minIdle,
long maxWait) { // 是负责建立Factory的连接工厂类
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;
}
}

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

@ -0,0 +1,76 @@
package com.ccsens.util.mybatis;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.cache.Cache;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import javax.annotation.Resource;
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;
@Resource(name="mybatisCache")
private RedisTemplate redisTemplate;
/** redis过期时间 单位:s */
private static final long EXPIRE_TIME_IN_MINUTES = 30;
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) {
redisTemplate.opsForValue().set(key, value, EXPIRE_TIME_IN_MINUTES, TimeUnit.SECONDS);
}
@Override
public Object getObject(Object key) {
return redisTemplate.opsForValue().get(key);
}
@Override
public Object removeObject(Object key) {
return redisTemplate.delete(key);
}
@Override
public void clear() {
redisTemplate.execute((RedisCallback) connection -> {
//将数据库清空
connection.flushDb();
return null;
});
}
@Override
public int getSize() {
return 0;
}
@Override
public ReadWriteLock getReadWriteLock() {
return readWriteLock;
}
}
Loading…
Cancel
Save