Spring事物

Spring事务传播属性(7种)

•? REQUIRED 业务方法需要在一个事务中运行。如果方法运行时 ,已经处在一个事务中 ,那么加入到这个事务中 ,否则自己创建一个事务。 (默认)。

•? NOT-SUPPORTED 声明方法需要事务。如果方法没有关联到一个事务 ,容器会为它开启一个事务 ,如果方法在一个事务中被调用 ,该事务将会被挂起 ,在方法调用结束后 ,原先的事务会恢复执行。

•? REQUIREDNEW 业务方法必须在自己的事务中运行。一个新的事务将被启动 ,而且如果有一个事务正在运行 ,则将这个事务挂起 ,方法运行结束后 ,新事务执行结束 ,原来的事务恢复运行。

•? MANDATORY 该方法必须运行在一个现有的事务中 ,自身不能创建事务 ,如果方法在没有事务的环境下被调用 ,则会抛出异常。

•? SUPPORTS 如果该方法在一个事务环境中运行 ,那么就在这个事务中运行 ,如果在事务范围外调用 ,那么就在一个没有事务的环境下运行。

•? NEVER 表示该方法不能在有事务的环境下运行 ,如果在有事务运行的环境下调用 ,则会抛出异常

•? NESTED 如果一个活动的事务存在, 则运行在一个嵌套的事 务中, 如果没 有活动事务, 则按照REQUIRED事务方式执行。该事务可以独立的进行提交或回滚 ,如果回滚不会对外围事务造成影响

Spring事务隔离级别

•? DEFAULT 使用数据库默认隔离级别

•? READ_UNCOMMITTED 允许读取尚未提交的数据。可能导致脏读、幻读或不可重复读。

•? READ_COMMITTED 允许从已经提交的并发事务读取。可以防止脏读 ,但依然会出现幻读和不可重复读。

•? REPEATABLE_READ 对相同字段的多次读取结果是相同的 ,除非数据被当前事务改变。可以防止脏读和不可重复读 ,但幻读依然出现。

•? SERIALIZABLE 完全符合ACID的隔离级别 ,确保不会发生脏读 ,幻读和不可重复读。

 脏读 :一个事务读取到另一个事务没有提交到的数据。

? 不可重复读 :在同一事务中 ,多次读取同一数据返回的结果不同。

幻读 :一个事务读取到另一个事务已经提交的事务。

<!-- Jdbc事务管理器   -->
<bean id="transactionManager"   class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
</bean>
<!--   基于XML配置的事务   -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                        <!-- propagation事物传播,isolation隔离级别 -->
                        <tx:method name="save*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
                        <tx:method name="del*"/>
                        <tx:method name="edit*"/>
                        <tx:method name="find*" read-only="true"/>
            </tx:attributes>
</tx:advice>
<aop:config>
            <aop:pointcut expression="execution(* service..*.*(..))" id="myPointcut"/>
            <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>
</aop:config> 
基于Annotation的事务
xml
<tx:annotation-driven transaction-manager="transactionManager"/>     

java
@Named
@Transactional
public class UserSerivce {     

@Transactional(readOnly=true)     

public List<User> findAll() {
             return null;
             }
}  

Spring事物,布布扣,bubuko.com

时间: 2024-11-05 14:53:06

Spring事物的相关文章

MyBatis6:MyBatis集成Spring事物管理(下篇)

前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基础上稍微做一点点的进阶:多数据的事物处理.文章内容主要包含两方面: 1.单表多数据的事物处理 2.多库/多表多数据的事物处理 这两种都是企业级开发中常见的需求,有一定的类似,在处理的方法与技巧上又各有不同,在进入文章前,先做一些准备工作,因为后面会用到多表的插入事物管理,前面的文章建立了一个Student相关

spring 事物管理特性

采用编程式事务1. getCurrentSession()与openSession()的区别? * 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会 * 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession创建的session必须手动关闭 2.使用getCurrentSession()需要在hibernate.cfg.xm

MyBatis5:MyBatis集成Spring事物管理(上篇)

前言 有些日子没写博客了,主要原因一个是工作,另一个就是健身,因为我们不仅需要努力工作,也需要有健康的身体嘛. 那有看LZ博客的网友朋友们放心,LZ博客还是会继续保持更新,只是最近两三个月LZ写博客相对会慢一些,博客的内容也会更偏向于实战一些,主要是对于工作中遇到一些比较实际性的问题进行总结与研究,并整理成文与网友朋友们分享. 灵感来源于生活,灵感也来源于工作,今天LZ博文的内容就是MyBatis与Spring事物集成的问题,后面的文章写作宗旨就是尽量写得详细点,把东西能给网友朋友们说清楚,OK

spring 事物中遇到try catch 事物不会滚

依赖spring事物时,当service层进行try catch异常捕获时,事物不会产生回滚, service层代码如下@Resource TestDao testDao; public void insertMsg(ConversationBean conversationBean){ try{ for(int i=0;i<100;i++){ if(i!=10){ testDao.insert2(i); }else{ testDao.insert1(i); } } }catch(Excepti

spring事物(1)-----手写spring的事物框架

一,区别声明式事物和编程式事物 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理.管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务管理,spring推荐使用TransactionTemplate. 声明式事物其实就是编程式事物+spring的AOP代理,在里面我们是见不到手动的begin commit  和rollback的. 管理建立在AOP之上的.其本质是对方法前后进行拦截,然后在目

Spring事物管理简介 (转)

一.事物1.什么是事物 事物指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败 2.事物的特性 原子性:事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生 一致性:事物前后数据的完整性必须保持一致 隔离性:指多个用户并发访问数据库时,一个用户的事物不能被其他用户的事物所干扰,多个并发事物之间数据要相互隔离. 持久性:一个事物一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响. 二.事物的API介绍 Spring事物管理高层抽象主要包括

spring事物管理--声明式(AspectJ)(推荐使用)

1.表结构及数据 2.需引入的jar包: 3.业务层(Service).持久层(Dao)接口与实现类 Service接口: //转账案例业务层接口 public interface AccountService { /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(String out,String in,Double money); } Service实现类: //转账案例

170110、Spring 事物机制总结

spring两种事物处理机制,一是声明式事物,二是编程式事物 声明式事物 1)Spring的声明式事务管理在底层是建立在AOP的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务.声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过等价的基于标注的方式),便可以将事务规则应用到业务逻辑中.因为事务管理本身就是一个典型的横切

集成Spring事物管理

单独使用MyBatis对事物进行管理 前面MyBatis的文章有写过相关内容,这里继续写一个最简单的Demo,算是复习一下之前MyBatis的内容吧,先是建表,建立一个简单的Student表: create table student ( student_id int auto_increment, student_name varchar(20) not null, primary key(student_id) ) 建立实体类Student.java: public class Studen