只读数据库操作需要Spring @Transactional吗?

问题描述 投票:0回答:1

我有一项服务,仅从 PostgreSQL DB(从副本数据库,而不是主数据库)读取数据。在它的方法中,它可以对数据库进行多次查询。类和方法没有用@Transactional注释。我认为从数据库读取数据也需要事务,这就是为什么我们添加注释@Transactional(readonly = true)。我错了吗? 堆栈:Java、Spring Boot 3

java spring postgresql transactions spring-transactions
1个回答
0
投票

有些数据库不需要事务来读取数据。通常他们会在内部为每个查询创建一个事务,但不会告诉您这一点。

但是在事务中读取与在没有事务的情况下读取可能会产生不同的结果。

因为:事务可以有锁定。如果您的只读选择事务“X”是乐观锁定的,它可能会给出尊重到达保存点的外部插入事务“Y,Z”的更改,并且只读事务“X”乐观地假设“Y”是“Z”将会成功完成。

在这种情况下,只读事务“X”中的选择查询也给出了插入事务“Y”和“Z”的结果,但是没有事务的相同选择查询将不包含插入事务“Y”和“Z”的贡献“Z”。

© www.soinside.com 2019 - 2024. All rights reserved.