背景:在分布式环境下,对数据库进行调整
环境:SpringBoot + MybatisPlus + MySQL + Docker
产生了一下错误信息:
定位:在排除了确实不是写错数据库名导致的,初步判断是mybatis的缓存造成的,在了解了mybatis 缓存的基本原理后,把问题定位在一级缓存上
原因:由于在修改了数据库名后,没有进行缓存的清除,也没有对数据进行增删改操作,在查询同一条sql语句时,走了sqlSession的一级缓存,是修改前的数据库名,导致出现unknow database 的出现。
解决办法:
1:手动清除缓存 :在报错的查询语句前加下面的代码
@Autowired
private SqlSessionFactory sqlSessionFactory;
SqlSessionUtils.getSqlSession(sqlSessionFactory).clearCache();
2:配置文件: