186 字
1 分钟
MyBatis二级缓存导致数据读取不一致问题解决方案
MyBatis二级缓存导致数据读取不一致问题解决方案
问题描述
SpringBoot + MyBatis 可读已提交不生效,先在SpringBoot查询出结果然后在数据库修改值后在Java再次读取,结果读取的还是修改之前的值。
原因分析
是MyBatis二级缓存导致的。
解决办法
方案一:使用SqlSession清除缓存
@Resourceprivate SqlSession sqlSession;
@Transactional(isolation = Isolation.READ_COMMITTED)@Overridepublic void aaa() { SysLog log1 = this.getById(""); log.info("log1【{}】", log1.getLogContent()); sqlSession.clearCache(); SysLog log2 = this.getById(""); log.info("log2【{}】", log2.getLogContent());}方案二:使用SqlSessionTemplate清除缓存
@Resourceprivate SqlSessionTemplate sqlSessionTemplate;
@Transactional(isolation = Isolation.READ_COMMITTED)@Overridepublic void aaa() { SysLog log1 = this.getById(""); log.info("log1【{}】", log1.getLogContent()); sqlSessionTemplate.clearCache(); SysLog log2 = this.getById(""); log.info("log2【{}】", log2.getLogContent());}方案三:在SQL查询中禁用缓存
<select id="getById" resultType="SysLog" useCache="false"> SELECT * FROM sys_log WHERE id = #{id}</select> MyBatis二级缓存导致数据读取不一致问题解决方案
https://twenhub.com/posts/mybatiser-ji-huan-cun-dao-zhi-shu-ju-du-qu-bu-yi-zhi-wen-ti-jie-jue-fang-an/