首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用@Transactional(read-only = true)的真正意义是什么?

使用@Transactional(read-only = true)的真正意义是什么?
EN

Stack Overflow用户
提问于 2022-12-03 12:57:39
回答 1查看 23关注 0票数 2

@Transactional关于只读标志说:

一种布尔标志,如果事务实际上是只读的,则该标志可以设置为true,允许在运行时中进行相应的优化。这只是对实际事务子系统的提示;它将不一定是导致写访问尝试失败。当请求只读事务时,无法解释只读提示的事务管理器将不会抛出异常,而是会默默地忽略该提示。

因此,我知道在运行时正在进行一些事务优化,但是如果没有计划数据更改(至少在语义上),我无法确定事务的具体点是什么?出于性能考虑,在这种情况下完全避免事务不是更好吗?或者,是否有任何特定情况下,这样的交易可以结束?我还认为,Spring在这样的事务中如果可能发生数据更改,不会抛出任何操作项,这也是一个问题,因为这会严重地混淆开发人员,有没有办法抛出这样的异常呢?

EN

回答 1

Stack Overflow用户

发布于 2022-12-03 13:08:08

即使没有计划数据更改,您也可能希望使用只读事务的原因有几个:

  1. 以确保一致性:如果应用程序需要从多个表读取数据,只读事务可以确保您读取的数据在事务启动时相对于数据库状态是一致的。这是因为只读事务将不允许任何并发写入事务修改正在读取的数据。
  2. 可以提高性能:正如Javadoc提到的那样,只读事务允许某些运行时优化,例如跳过某些锁定操作或记录操作,这些操作对于只读事务来说是不必要的。这可以提高性能,减少数据库中的争用。
  3. 以避免意外更改:通过使用只读事务,可以防止意外修改数据库中的数据。如果您正在处理敏感数据,或者希望避免对未经授权修改的数据进行更改,这将非常有用。

但我必须承认,我不确定抛出的异常

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74666963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档