对spring 事物管理的理解

参考地址: http://blog.csdn.net/ufo2910628/article/details/46325651html

参考地址: http://www.jb51.net/article/70816.htmspring

参考地址: http://www.cnblogs.com/newsouls/p/3988216.html数据库

参考地址: http://www.open-open.com/lib/view/open1414310646012.htmlexpress

 

springmvc层也就是 controller层尽可能不要写太多代码, 若是只是对 数据库的查询,那么能够随便写代码,写在service层能够,写在controller层也能够,可是推荐写在 servi层写代码,contrller只是作简单的额外处理和 转发。mvc

可是若是整个mvc的过程设计到了 数据库的 增删改,那么就必须将 代码写入service层里面了,由于这样是比较方便事物的管理的, 出现了异常的 数据的回滚。好比 事物的声明式 注解:.net

@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)设计

是应该只用在service层的,这是比较合理和常规的作法,在contrller层是 不能进行事物的管理。除非进行了配置htm

Spring事务类型详解:blog

 

PROPAGATION_REQUIRED--支持当前事务,若是当前没有事务,就新建一个事务。这是最多见的选择。事务

PROPAGATION_SUPPORTS--支持当前事务,若是当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY--支持当前事务,若是当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW--新建事务,若是当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操做,若是当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER--以非事务方式执行,若是当前存在事务,则抛出异常。

PROPAGATION_NESTED--若是当前存在事务,则在嵌套事务内执行。若是当前没有事务,则进行与PROPAGATION_REQUIRED相似的操做。

 

以上四种配置方式最经常使用的仍是第1、二种,第三种是比较老旧的方式,而注解的方式不太适合比较大的项目,用于简单的小项目仍是很好的,其特色就是简单明了。每种方法都有每种方法的特色跟适用的环境,没有绝对的好与坏,只不过前两种在实际的工做当中用的更多一些。

 

<!-- 第一种配置事务的方式 ,tx-->
<tx:advice id="txadvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />
        <tx:method name="modify*" propagation="REQUIRED" rollback-for="Exception" />
        <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>
        <tx:method name="*" propagation="REQUIRED" read-only="true"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="daoMethod" expression="execution(* com.dao.*.*(..))"/>
    <aop:advisor pointcut-ref="daoMethod" advice-ref="txadvice"/>
</aop:config>

expression="execution(* com.dao.*.*(..))" 其中第一个*表明返回值,第二*表明dao下子包,第三个*表明方法名,“(..)”表明方法参数。

相关文章
相关标签/搜索