有人可以解释一下,当我将readOnly
值设为true
时,以及将false
与@Transactional
一起使用时,我应该将其设为{{1}}吗?
答案 0 :(得分:4)
当您只是从数据库中读取/选择而不是更改任何数据时 - 通过执行更新/插入/删除。
如果你可以指定readOnly,那么你的资源就要少得多。
答案 1 :(得分:2)
定义非常简单:当且仅当您确保不进行更新时,您可以使用readonly=true
,在事务内部执行插入或删除操作。
如果支持,这将优化dbms的锁定行为。
readonly
默认为false。
最好的问候,
SAM
修改强>
/**
* {@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;
答案 2 :(得分:1)
自定义隔离级别,可以为事务添加更多控制权。
如果您知道方法是只读的,则应指定它。
对于readonly = true,您要向事务管理器说一个特定方法只能从DB读取。这有两个好处:
首先,它可以比其他更快,因为它允许DBMS优化事务(如果支持)。 其次,它可以避免死锁问题(例如,当特定表被写入锁定时),因为您确保该方法不会执行INSERT或UPDATE。
但是,在这里您可以找到有关它的所有详细信息: http://docs.spring.io/spring/docs/2.5.x/reference/transaction.html