如果外部数据库连接,甚至数据库管理系统对数据库进行更改,但ibatis(mybatis )缓存尚未过期,是否会对数据库更改作出响应? 在这方面有什么好的解决办法吗?
简单来说,假设数据库系统为MySQL。 例如,一个Java的应用持久层框架使用ibatis(mybatis )调用数据库中的ID为100的记录,每隔500ms (毫秒)进行一次选择操作。 由于缓存时间很长,在这种情况下,假设此程序为I/O,但此时在Java APP应用程序中,每500毫秒对该记录进行select操作仍然有效! 这很郁闷。 ibatis(mybatis )缓存是否具有允许ibatis(mybatis )通过修改外部数据库连接或删除记录主动清除缓存的选项?
我也遇到了这个问题。 外部程序更改数据库后,mybatis中的会话不受影响。 要避免这种影响,只能关闭并打开会话。
但是,如果mybatis与spring集成,则表明dao继承了SqlSessionDaoSupport。 SqlSessionDaoSupport内部的sqlSession实现使用动态代理封装(每个select ) )查询会自动先运行openSession ),然后关闭) 请参阅下面的mybatis官方文档。)
官方文档摘要
mybatissqlsessionprovidesyouwithspecificmethodstohandletransactionsprogrammatically.butwhenusingmybatis-springyourbeanswill sionoraspringmanagedmapper.thatmeansthatspringwillalwayshandleyourtransactions。
You cannot callSqlSession.commit (、SqlSession.rollback )、orSqlSession.close )、 overaspringmanagedsqlsesion.if you ansupportedoperationexceptionexceptionwillbethrown.notethesemethodsarenotexposedininjectectectectetetion