1

任何人都可以解释我什么时候应该设置readOnly价值true,什么时候应该设置它,false什么时候使用它@Transactional

4

3 回答 3

4

当您仅从数据库中读取/选择而不更改任何数据时 - 通过执行更新/插入/删除。

如果您可以指定 readOnly ,那么您应该使用更少的资源。

于 2013-09-27T17:30:19.447 回答
2

定义非常简单:readonly=true当且仅当您确保事务内部不发生更新、插入或删除操作时,您才可以使用。如果支持,这会优化您的 dbms 的锁定行为。

readonly默认为假。

此致,

山姆

编辑

/**
 * {@code true} if the transaction is read-only.
 * Defaults to {@code false}.
 * <p>This just serves as a hint for the actual transaction subsystem;
 * it will <i>not necessarily</i> cause failure of write access attempts.
 * A transaction manager which cannot interpret the read-only hint will
 * <i>not</i> throw an exception when asked for a read-only transaction.
 * @see org.springframework.transaction.interceptor.TransactionAttribute#isReadOnly()
 */
boolean readOnly() default false;
于 2013-09-27T17:32:10.637 回答
1

自定义隔离级别可以为事务添加更多控制。

如果你知道一个方法是只读的,你应该指定它。

使用 readonly=true 您是在对事务管理器说,一种特定方法只能从数据库中读取。这有两个优点:

首先,它可以比其他的更快,因为它允许 DBMS 优化事务(如果支持)。其次,它可以使您免于死锁问题(例如,当特定表被写锁定时),因为您确保该方法不会执行 INSERT 或 UPDATE。

但是,您可以在这里找到有关它的所有详细信息:http: //docs.spring.io/spring/docs/2.5.x/reference/transaction.html

于 2013-09-27T22:42:12.163 回答