我要配置mybatis二级缓存为redis
因为需要注入redis的ip port username等等
我需要构建JedisPoolConfig的bean,然后得到JedisConnectionFactory的bean
而我定义的redis缓存如下
final class MybatisCache implements Cache {
private String id
private final ReadWriteLock readWriteLock = new DummyReadWriteLock()
private RedisTemplate<String, Object> redisTemplate
private HashOperations<String, Object, Object> hashOperations
private static JedisConnectionFactory jedisConnectionFactory
static setJedisConnectionFactory(JedisConnectionFactory factory){
jedisConnectionFactory = factory
}
MybatisCache(String id) {
if (id == null) {
throw new IllegalArgumentException("Cache instances require an ID")
} else {
this.id = id
redisTemplate = new RedisTemplate()
redisTemplate.setConnectionFactory(jedisConnectionFactory)
redisTemplate.setKeySerializer(new StringRedisSerializer())
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer())
redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer())
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer())
redisTemplate.afterPropertiesSet()
hashOperations = redisTemplate.opsForHash()
}
。。。
}
但是MybatisCache不是spring的bean,所以如果这个类被加载时JedisPoolConfig,JedisConnectionFactory等bean还没有初始化的话,就得到null,有没有什么办法让JedisPoolConfig,JedisConnectionFactory等bean能保证在MybatisCache被使用期前初始化?