spring事物管理

来源:互联网 发布:python怎么输入 编辑:程序博客网 时间:2024/06/05 14:49

             spring的xml配置文件中配置事物管理,程序在进行事物操作的前提是该bean已经交给了spring管理,否则不会起到事物的作用。

一:@Transactional 起作用的三大前提

1:数据源
2:事物管理器
3:注解处理器(如果不使用@Tranactional注解,那么这一项可以省略)

以上三项跟你使用的是哪一种数据库的操作框架相关,有jdbc,或者是hibernate,实际上hibernate也是对jdbc的进一步封装,但使用的每一个处理类都是不一样的

1:jdbc 配置

<bean id="datasource"  class="org.apache.commons.dbcp.BasicDataSource">
<bean id ="txManger" class="org.springframework.jdbc.core.JdbcTemplate>
<tx:annotation-driven transaction-manager="txManger">

2:hibernate配置

<bean id="datasource"  class="org.apache.commons.dbcp.BasicDataSource">
<bean id="txManger" class=org.springframework.orm.hibernate4.HibernateTranactional/>
<tx:annotation-driven transaction-manager="txManger">

二:基本异常说明

对于程序抛出的RunTimeException,默认情况下事物会回滚,也就是说如果你对数据进行了增删改,那么对数据库的更改将不会被提交;如果需要对RunTimeException事物进行不进行回滚,可以添加以下配置:

@Transactional(noRollbackFor=RuntimeException.class)

如果是其他的Exception,如果对数据库进行了增删改,这个时候事物将会被提交到数据库中;同样,如果不希望被回滚掉,那么也可以进行配置

@Transactional(rollbackFor=Exception.class)

三:事物传播行为

REQUIRED:   业务方法需要在一个事物中运行,如果方法运行时,已经处在一个事物中,那么加入到该事物,否则为自己创建一个新的事物
NOT_SUPPORTED:   声明方法不需要事物,如果方法没有关联到一个事物,容器不为它开启事物,如果方法在一个事物中被调用,该事物会被挂起,在方法执行完之后,原先    的事物会被继续执行。
REQUIREDNEWS:  不管原先有没有事物,该业务方法都会为自己起一个新的事物;如果已经在一个事物中,那么原先的会被挂起,新的事物会被创建,等新事物执行完之       后,原先的事物才会被恢复。
MANDATORY:            属性指定所在的业务方法必须在一个事物中执行,自己不能执行事物;如果没有在事物中,则抛出一个例外
SUPPORTS:                属性表明如果业方法在一个事物范围内,则成为事物的一部分,如果没有在事物范围内执行,那么就在没有事物的环境下执行
NERVER:                     属性表明业务方法不能再事物中执行,如果有事物,就抛出例外
NESTED:                       如果一个活动的事物存在,则执行在一个嵌套的事物中,如果没有活动事物,就按REQUIRED属性执行,它使用了一个单独的事物,这个事物拥有多个会滚保存点,内部事物的会滚不会影响到外部事物。









原创粉丝点击