SpringBoot多模块项目ApplicationContext无法getBean,MybatisPlus二级缓存与放弃Mybatis(Plus)的二级缓存
Posted 明天会更好new
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot多模块项目ApplicationContext无法getBean,MybatisPlus二级缓存与放弃Mybatis(Plus)的二级缓存相关的知识,希望对你有一定的参考价值。
SpringBoot多模块项目ApplicationContext无法getBean,MybatisPlus二级缓存与放弃Mybatis(Plus)的二级缓存
事情是这样发生的
我想用redis实现mybatis-plus的二级缓存,用mybatis的方法(准备好cahce类,在mapper文件里面标记上cahce标签)发现不起作用!!!气愤,查了一下,下面是文档原文:
mapper 层二级缓存问题
我们建议缓存放到 service 层,你可以自定义自己的 BaseServiceImpl 重写注解父类方法,继承自己的实现。
#mapper 层二级缓存刷新问题
如果你按照 mybatis 的方式配置第三方二级缓存,并且使用 2.0.9 以上的版本,则会发现自带的方法无法更新缓存内容,那么请按如下方式解决(二选一):
1.在代码中 mybatis 的 mapper 层添加缓存注释,声明 implementation 或 eviction 的值为 cache 接口的实现类
@CacheNamespace(implementation=MybatisRedisCache.class,eviction=MybatisRedisCache.class) public interface DataResourceMapper extends BaseMapper<DataResource>
2.在对应的 mapper.xml 中将原有注释修改为链接式声明,以保证 xml 文件里的缓存能够正常
<cache-ref namespace="com.mst.cms.dao.DataResourceMapper"></cache-ref>
不推荐,但是还是用一下吧,毕竟之前做博客项目用二级缓存效果不错,结构直接报错了: ##Error querying database. Cause: java.lang.NullPointerException
先说一下是怎么出现错误的
public class RedisCache implements Cache
·········
public RedisTemplate getRedisTemplate()
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
return redisTemplate;
@Configuration
public class RedisConfig
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
········
return template;
用过mybatis二级缓存的都知道,需要用ApplicationContext手动注入RedisTemplate,报错的原因就是注入不进去,为啥注入不进去,之前的项目明明可以啊!
我的推断是因为现在多模块了,SpringBoot要加载bean是先加载子项目的jar然后再加载,bean加载顺序出现了问题!(当然只是我的臆想,顺便学一下如果你还不知道如何控制springboot中bean的加载顺序,那你一定要看此篇)
有一说一文章写的非常好!但是我也没有试,在自己瞎鼓捣了一天之后,看了一些多模块的开源项目,发现没有使用mybatis二级缓存的!!!想参考都没有!于是我百度搜——》“mybaits二级缓存开启好还是不开好”,结果喜人!
放弃mybatis二级缓存
mybatis二级缓存对多表查询不支持,还要过滤,而且严重依赖application,这也导致了我上面遇到的bug,那太棒了我也省事了,不是有新活了。
在Service层使用缓存
编写RedisService业务类,单独定制,这也就用redis相对少多了,以前是只有是高频表就放到redis里面,现在只在最高频的地方定制redis缓存。
总结
1、放弃Mybatis二级缓存
2、在Service层定制缓存业务类
以上是关于SpringBoot多模块项目ApplicationContext无法getBean,MybatisPlus二级缓存与放弃Mybatis(Plus)的二级缓存的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot项目优雅的实现多配置文件切换以及获取配置信息
SpringBoot项目优雅的实现多配置文件切换以及获取配置信息