您的位置:首页 > 编程语言 > Java开发

对spring 事物管理的理解

2016-07-21 00:00 211 查看
参考地址: http://blog.csdn.net/ufo2910628/article/details/46325651
参考地址: http://www.jb51.net/article/70816.htm
参考地址: http://www.cnblogs.com/newsouls/p/3988216.html
参考地址: http://www.open-open.com/lib/view/open1414310646012.html
springmvc层也就是 controller层尽量不要写太多代码, 如果只是对 数据库的查询,那么可以随便写代码,写在service层可以,写在controller层也可以,但是推荐写在 servi层写代码,contrller只是做简单的额外处理和 转发。

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

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

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

Spring事务类型详解:

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

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

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

PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

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

PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

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

<!-- 第一种配置事务的方式 ,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下子包,第三个*代表方法名,“(..)”代表方法参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: