2015-04-21 97 views
0

我指的是在服務層的所有方法中應用spring aop事務的URL中所聲明的例子,但這也將應用SELECT等只讀方法的事務管理。服務層的Spring AOP事務管理

如果我將事務管理應用於readOnly事務,是否有任何不利影響?

<aop:config> 
<aop:advisor pointcut="execution(* com.xyz.someapp.service.*.*(..)))" 
advice-ref="transactionAdvice" /> 
</aop:config> 

http://www.studytrails.com/frameworks/spring/spring-declarative-transactions.jsp

我有另外一個問題。如果我有調用billingService.create()的orderService.create(),那麼將如何應用事務隔離?

回答

1

您一般需要甚至爲只讀操作使用事務,因爲事務會爲您提供數據的一致視圖。如果您跳過交易,您可能會看到其他未完成交易的部分更新。

1

我不會認爲會有任何不利影響,因爲事務只是定義了一組原子操作。如果事務失敗,則將執行回滾,但只讀操作不會以任何方式影響數據庫。 我能想到的唯一的巨大缺點與績效有關。底層數據庫的鎖定策略(無論表或行是否被鎖定)確定您的隔離級別。根據您的鎖定策略,在交易過程中會應用某種隔離。例如,當您寫入數據庫時​​,您的隔離級別決定是否可以通過並行讀取來看到正在進行的更改(導致例如髒讀,不可重複讀取等),或者如果這些更改必須在它們之前提交對其他人可見。 因此,您會鎖定您只想讀取的資源,這可能會導致高可用性應用程序的性能下降。總結:除了導致性能問題之外,它沒有不良影響。

解決你的第二個問題:這取決於你如何管理交易。我猜在這種情況下,兩種服務方法都需要事務處理,所以我認爲默認行爲是第一個服務調用的事務被第二個服務方法調用繼承(這稱爲「事務傳播」)。這是必需的,因爲不允許嵌套事務。