spring事务传播行为和事务隔离级别

spring的注解式事务使用:

spring配置文件中引入<tx:>命名空间配置

<beans xmlns="http://www.springframework.org/schema/beans";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns:tx="http://www.springframework.org/schema/tx";
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">;

②spring声明式事务配置

<!-- 事务管理器配置 -->
<bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="defaultTransactionManager" proxy-target-class="true" />

在接口或类的声明处写@Transactional

如果写在接口中, 那么接口的实现类就会继承事务,但是只能当你设置了基于接口的代理时它才生效,所以使用事务时推荐写在具体的类中

当标于类前时,标示类中所有的public方法都进行事务管理,不是public的方法标注了注解但是没有事务功能。

事物传播行为设置:

@Transactional(propagation=Propagation.REQUIRED) (默认设置)

如果有事务, 那么加入事务, 如果没有就新建一个。

@Transactional(propagation=Propagation.NOT_SUPPORTED)

此方法不开启事务管理

@Transactional(propagation=Propagation.REQUIRES_NEW)

无论是否存在事务,都创建一个新的事务,原来的挂起,等待新的事务执行完毕,然后在执行老的事务。

@Transactional(propagation=Propagation.MANDATORY) 

必须在一个已有的事务中执行,否则抛出异常。

@Transactional(propagation=Propagation.NEVER) 

必须在一个没有的事务中执行,否则抛出异常。

@Transactional(propagation=Propagation.SUPPORTS) 

如果其他的BEAN调用这个方法,在其他的BEAN中声明事务,那就用事务。

如果其他的BEAN没有声明事务,那就不用事务。

事物超时时间设置:

@Transactional(timeout=30)

超时时间是30秒

事务隔离级别设置:

@Transactional(isolation = Isolation.READ_UNCOMMITTED)

读取未提交数据(会出现脏读,、不可重复读)

@Transactional(isolation = Isolation.READ_COMMITTED)(SQLSERVER默认是此设置)

读取已提交数据(会出现不可重复读、幻读)

@Transactional(isolation = Isolation.REPEATABLE_READ)(MYSQL默认是此设置)

可重复读(会出现幻读)

@Transactional(isolation = Isolation.SERIALIZABLE)

串行化

名词解释:

脏读 : 一个事务读取到另一个事务中未提交的更新数据。

不可重复读 : 在一个事务中可以读取到另一个事务中已提交的更新数据。

可重复度:在一个事务中不能读取到另一个事务中已提交的更新数据。

幻读 : 在一个事务中可以读取到另一个事务中已提交的新增(insert)数据。

猜你喜欢

转载自my.oschina.net/MinghanSui/blog/1626878
今日推荐