Spring 事務 readOnly 到底是怎么回事?
Spring的事務經常會有這樣的配置:
<tx:method name="search*" read-only="true" />
或者這樣的注記:
@Transactional(readOnly = true)
原因:
“只讀事務”並不是一個強制選項,它只是一個“暗示”,提示數據庫驅動程序和數據庫系統,這個事務並不包含更改數據的操作,
那么JDBC驅動程序和數據庫就有可能根據這種情況對該事務進行一些特定的優化,
比方說不安排相應的數據庫鎖,以減輕事務對數據庫的壓力,畢竟事務也是要消耗數據庫的資源的。
1 readonly並不是所有數據庫都支持的,不同的數據庫下會有不同的結果。
2 設置了readonly后,connection都會被賦予readonly,效果取決於數據庫的實現。
3 在ORM中,設置了readonly會賦予一些額外的優化,例如在Hibernate中,會被禁止flush等。