【2016-02-24】Spring的事务到底该给Dao配置仍是给Service配置?

一、至于第一点说的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层和业务逻辑层

相关文章
相关标签/搜索