Spring事务(六)-只读事务

[复制链接]
发表于 2022-10-7 12:32:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

@Transactional(readOnly=true)就可以把事务方法设置成只读事务。设置了只读事务,事务从开始到结束,将看不见其他事务所提交的数据。这在某种程度上解决了事务并发的问题。一个方法内,如果没有对数据库insert、update、delete的操作,那么,这个事务方法是可以设置成readOnly=true。
事务方法设置成只读事务,会发生什么?

1、只读事务方法内,数据库的操作只能是读取数据。
如果只读事务方法内有对数据库进行insert、update、delete的操作,则会报异常。
Connection is read-only. Queries leading to data modification are not allowed
2、只读事务方法内,多次调用同一个方法,查询结果都一样,不会受到并发事务的影响。
如果只读事务方法内,多次调用同一个方法,查询结果将会使用第一次查询的缓存。但是,如果调用的不是同一个方法(即使这两个方法里的select语句是一模一样),多次调用方法得到的查询结果就会受到并发事务的影响。也就是说,如果多次调用不同的方法(即使这两个方法里的select语句是一模一样),多次调用期间,如果有其他事务修改了数据并提交了,就会得出不一样的查询结果。
3、只读事务方法内,ORM框架会对其进行查询优化。
由于只读事务不存在数据的修改,因此数据库将会为只读事务提供一些优化手段,例如Oracle对于只读事务,不启动回滚段,不记录回滚log。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表