在Spring Boot中使用Mybatis RedisCache的笔记

MyBatis RedisCache 的项目地址

http://mybatis.org/redis-cache/

https://github.com/mybatis/redis-cache

这是MyBatis官方的二级缓存的Redis实现, 因为其依赖于Jedis和固定的redis.properties, 和Spring Boot集成较为麻烦, 在Spring Boot 2.1.x中使用还会报RedisConfig初始化错误.

实际项目使用中, 经过一些修改使其能正常使用, 记录如下

使其正常运行

首先不要用pom的jar包引入, 直接到github项目地址上下载源代码, 需要的只是 src/main/java/org/mybatis/caches/redis/ 目录下的文件, 将其放到自己的项目里.

其次, 现在的源码中, 对redis.properties要求其中各项配置名称要以redis.为前缀, 和jar包引用时的要求不一样.

这样基本就能启动运行了

集成到Spring Boot的配置

如果不希望单独做一个redis.properties的配置文件, 可以在现有的配置文件中加上一个静态引用, 例如

@Component
@ConfigurationProperties("yourconfigprefix")
public class SysConfig {
    private static SysConfig f;

    private int developmentMode;
    private String buildTimestamp;
    private RedisConfig redisCache;
    private RedisConfig redisLock;
    private RedisConfig redisMybatis;

    @PostConstruct
    public void initialize() {
        f = this;
    }

    public static SysConfig getInstance() {
        return f;
    }

    public int getDevelopmentMode() { return developmentMode; }
    public void setDevelopmentMode(int developmentMode) { this.developmentMode = developmentMode; }
    public String getBuildTimestamp() { return buildTimestamp; }
    public void setBuildTimestamp(String buildTimestamp) { this.buildTimestamp = buildTimestamp; }
    public RedisConfig getRedisCache() { return redisCache; }
    public void setRedisCache(RedisConfig redisCache) { this.redisCache = redisCache; }
    public RedisConfig getRedisLock() { return redisLock; }
    public void setRedisLock(RedisConfig redisLock) { this.redisLock = redisLock; }
    public RedisConfig getRedisMybatis() { return redisMybatis; }
    public void setRedisMybatis(RedisConfig redisMybatis) { this.redisMybatis = redisMybatis; }

    public static class RedisConfig {
        private String host;
        private int port;
        private String password;
        private int database;

        public String getHost() { return host; }
        public void setHost(String host) { this.host = host; }
        public int getPort() { return port; }
        public void setPort(int port) { this.port = port; }
        public String getPassword() { return password; }
        public void setPassword(String password) { this.password = password; }
        public int getDatabase() { return database; }
        public void setDatabase(int database) { this.database = database; }
    }
}

  

然后, 就可以在RedisCache.java中, 静态引用SysConfig了, 将其中初始化那一步修改为

public RedisCache(final String id) {
        if (id == null) {
            throw new IllegalArgumentException("Cache instances require an ID");
        }
        this.id = id;
        redisConfig = new RedisConfig();
        redisConfig.setHost(SysConfig.getInstance().getRedisMybatis().getHost());
        redisConfig.setPort(SysConfig.getInstance().getRedisMybatis().getPort());
        redisConfig.setPassword(SysConfig.getInstance().getRedisMybatis().getPassword());
        redisConfig.setDatabase(SysConfig.getInstance().getRedisMybatis().getDatabase());

        pool = new JedisPool(redisConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getConnectionTimeout(),
                redisConfig.getSoTimeout(), redisConfig.getPassword(), redisConfig.getDatabase(), redisConfig.getClientName(),
                redisConfig.isSsl(), redisConfig.getSslSocketFactory(), redisConfig.getSslParameters(),
                redisConfig.getHostnameVerifier());
    }

.因为ConfigurationProperties的初始化在mapper之前, 这样就可以在mapper初始化的时候拿到已经赋值的配置信息, 完成mapper对应的RedisCache实例的初始化.

猜你喜欢

转载自www.cnblogs.com/milton/p/12341312.html