一、至於第一點說的web層事務,暫時沒有接觸到,須要找些案例瞭解下~html
二、從咱們現有項目上來看,事務是控制在service層的:由於一個完整的業務操做涉及到幾個service,它們之間互相調用,一個功能涉及到多個dao操做,須要同時insert、delete、update,仍是有些複雜的。若是此時事務在dao層,會形成業務上數據不一致,麻煩多多。java
三、若是業務操做只涉及到單個dao操做,事務能夠控制在dao層,只是這時候在dao層和service層沒差的,反正一一對應關係。web
本身項目中的配置以下:
spring
<aop:config>
<aop:pointcut expression="execution(* com.dp.rathan.dao..*(..))
|| execution(* com.dp.rathan.service.module.ReportService.*(..))
|| execution(* com.dp.rathan.service.module.ChartService.*(..))
|| execution(* com.dp.rathan.service.module.CubeService.*(..))
|| execution(* com.dp.rathan.service.module.MDXService.*(..))
|| execution(* com.dp.rathan.service.module.FolderService.*(..))
|| execution(* com.dp.rathan.service.module.ParamService.*(..))
|| execution(* com.dp.rathan.service.module.AdhocService.*(..))" id="transactionPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
原文內容:數據庫
Spring事務爲業務邏輯進行事務管理,保證業務邏輯上數據的原子性。express
事務得根據項目性質來細分:事務能夠設置到三個層面(dao層、service層和web層)。 安全
第一:web層事務,這通常是針對那些安全性要求較高的系統來講的。例如電子商務網站。粒度小,通常系統用不着這麼細。 測試
第二:service層事務,這是一常見的事務劃分, 將事務設置在業務邏輯上,只要業務邏輯出錯或異常就事務回滾。粒度較小,通常推薦這種方式。網站
第三:數據持久層數據務,也就是常說的數據庫事務。這種事務在安全性方面要求低。就是給一個簡單的增刪改之類的操做增長事務操做。粒度大spa
給Service層配置事務,由於一個Service層方法操做能夠關聯到多個DAO的操做。在Service層執行這些Dao操做,多DAO操做有失敗所有回滾,成功則所有提交。
事務分爲業務事務和系統事務,業務事務也就是業務邏輯上操做的一致性,系統事務天然就是指真正的數據庫事務,
Spring配置事務的是爲了什麼進行管理,固然是爲業務邏輯進行事務管理,保證業務邏輯上數據的原子性;
Dao層是什麼,數據訪問層,是不該該包含業務邏輯的,這就是和Service層的不一樣;
Service層就是業務邏輯層,事務的管理就是爲Service層上的保證。
感謝原做者,原文連接:http://www.cnblogs.com/linjiqin/archive/2013/11/25/3441813.html
另,配置參考(未經測試):Spring配置事務在DAO層和業務邏輯層