spring事务隔离性及解释

1)事务传播:

1、REQUIRED :如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

2、SUPPORTS :如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

3、MANDATORY :如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

4、REQUIRES_NEW :创建一个新的事务,如果当前存在事务,则把当前事务挂起。

5、NOT_SUPPORTED :以非事务方式运行,如果当前存在事务,则把当前事务挂起。

6、NEVER :以非事务方式运行,如果当前存在事务,则抛出异常。

2)事务隔离:

1、DEFAULT :默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值是:READ_COMMITTED 。

2、READ_UNCOMMITTED :读取未提交数据(会出现脏读, 不可重复读) 基本不使用

3、READ_COMMITTED :读取已提交的数据(防止脏读,会出现不可重复读和幻读)大多数情况下使用。

4、REPEATABLE_READ :可重复读(会出现幻读可以防止脏读和不可重复读)。

5、SERIALIZABLE :所有的事务逐个执行(可以防止脏读、不可重复读以及幻读)影响性能,基本不使用。

脏读 : 一个事务读取到另一事务未提交的更新数据
不可重复读 : 在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说, 
后续读取可以读到另一事务已提交的更新数据. 相反, "可重复读"在同一事务中多次
读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据
幻读 : 一个事务读到另一个事务已提交的insert数据

一、传统的xml配置

<!--配置数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="url" value="jdbc:oracle:thin:@"/> 
    <property name="username" value="" />
    <property name="password" value="" />
    <property name="initialSize" value="20" />
    <property name="minIdle" value="20" />
    <property name="maxActive" value="200" />
    <property name="poolPreparedStatements" value="true" />   
    <property name="timeBetweenEvictionRunsMillis" value="10000" />
    <!-- 监控 -->
    <property name="filters" value="stat" />
    <property name="testOnBorrow" value="true" />
</bean>
<!--事务管理-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<!-- 事务通知 -->
<tx:advice id="txAdivce" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="insert*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="select*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>
 
<!-- 事务切入 -->
<aop:config>
    <!-- 切点(* 所有包、类或者方法) -->
    <aop:pointcut expression="execution(* com.*.service.*.*(..))" id="txPointcut"/>
    <!-- 通知 -->
    <aop:advisor advice-ref="txAdivce" pointcut-ref="txPointcut"/>
</aop:config>

二、java注解配置:@Transactional

①事务隔离:例:@Transactional(isolation = Isolation.DEFAULT)

②事务传播:例:@Transactional(propagation = Propagation.REQUIRED)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值