2013-09-27 64 views

回答

4

當您只從數據庫讀取/選擇數據並且不更改任何數據時 - 通過執行更新/插入/刪除。

如果您可以指定readOnly,那麼您應該將其作爲資源密集程度低得多。

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; 
1

自定義添加更多的控制您的事務的隔離級別。

如果你知道一個方法是隻讀的,你應該指定它。

隨着readonly = true,您正在向事務管理器說,一個特定的方法只能從DB中讀取。這有兩個好處:首先,它可以比其他的更快,因爲它允許DBMS優化事務(如果支持的話)。其次,它可以幫助您避免死鎖問題(例如特定的表被寫入鎖定時),因爲您確保該方法不會執行INSERT或UPDATE。

但是,在這裏您可以找到關於它的所有細節: http://docs.spring.io/spring/docs/2.5.x/reference/transaction.html