MyBatis二级缓存导致数据读取不一致问题解决方案
问题描述
SpringBoot + MyBatis 可读已提交不生效,先在SpringBoot查询出结果然后在数据库修改值后在Java再次读取,结果读取的还是修改之前的值。
原因分析
是MyBatis二级缓存导致的。
解决办法
方案一:使用SqlSession清除缓存
@Resource
private SqlSession sqlSession;
@Transactional(isolation = Isolation.READ_COMMITTED)
@Override
public void aaa() {
SysLog log1 = this.getById("");
log.info("log1【{}】", log1.getLogContent());
sqlSession.clearCache();
SysLog log2 = this.getById("");
log.info("log2【{}】", log2.getLogContent());
}
方案二:使用SqlSessionTemplate清除缓存
@Resource
private SqlSessionTemplate sqlSessionTemplate;
@Transactional(isolation = Isolation.READ_COMMITTED)
@Override
public 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>