Spring框架学习笔记(九) Spring中的事务管理(基于注解配置)

(一) 事务简介

     1.  事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的完整性和一致性。

    (通俗的讲,就是一手交钱一手交货。保证数据在开发过程中全部运行正确,主要应用于关联数据)

     2. 事务的四个关键属性(ACID)

  •  原子性(atomicity): 事务是一个原子操作, 由一系列动作组成。事务的原子性确保动作要么全部完成要么完全不起作用。
  • 一致性(consistency): 一旦所有事务动作完成, 事务就被提交。 数据和资源就处于一种满足业务规则的一致性状态中。 
  • 隔离性(isolation): 可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来, 防止数据损坏。 
  • 持久性(durability): 一旦事务完成, 无论发生什么系统错误, 它的结果都不应该受到影响. 通常情况下, 事务的结果被写到持久化存储器中。

(二) Spring 中的事务管理

      1.  Spring 在不同的事务管理 API 之上定义了一个抽象层。

      2.编程式事务管理: 将事务管理代码嵌入到业务方法中来控制事务的提交和回滚。

      3.声明式事务管理: 大多数情况下比编程式事务管理更好用. 它将事务管理代码从业务方法中分离出来, 以声明的方式来实现事务管理. 事务管理作为一种横切关注点, 可以通过 AOP 方法模块化. Spring 通过 Spring AOP 框架支持声明式事务管理。

(三) Spring 中事务的实现

      1. 在Xml文件中先配置事务管理器,再打开事务管理器,具体操作

 <!-- 配置事务管理器 -->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"></property>
     </bean>
      <!-- 启用事务 -->
       <tx:annotation-driven transaction-manager="transactionManager"/>
     

       2. 在类中实现事务的方法前面加上  

        @Transactional  注解

@Transactional
	@Override
	public void purchase(String username, String isbn) {
		// TODO 自动生成的方法存根
		
		//1. 获取书的单价
		double price = book.selctbookprice(isbn);
				
		//2. 更新数的库存
		book.selctstock(isbn);
				
		//3. 更新用户余额
		book.selctbanlance(username, price);
		
	}

     (四) 事务管理中的其他属性

        1.事务传播属性

@Transactional(propagation=Propagation.REQUIRES_NEW)
	@Override
	public void purchase(String username, String isbn) {
		// TODO 自动生成的方法存根
		
		//1. 获取书的单价
		double price = book.selctbookprice(isbn);
				
		//2. 更新数的库存
		book.selctstock(isbn);
				
		//3. 更新用户余额
		book.selctbanlance(username, price);
		
	}

        (当事务方法被另一个事务方法调用时, 必须指定事务应该如何传播. 例如: 方法可能继续在现有事务中运行, 也可能开启一个新事务, 并在自己的事务中运行)常用的为下图1  2 中的属性    1 为默认属性

         

          (1) REQUIRED 传播行为

        

        (2) REQUIRES_NEW 传播行为 

      

2. 隔离事务属性 

@Transactional 的 isolation 属性中设置隔离级别。

3.回滚事务属性

@Transactional 注解的 rollbackFor 和 noRollbackFor 属性来定义。

4.超时事务属性

@Transactional 注解的 timeout 属性定义

5. 只读事务属性

@Transactional 注解的 readonly 属性定义

 

发布了25 篇原创文章 · 获赞 14 · 访问量 7193

猜你喜欢

转载自blog.csdn.net/sdau_20171819/article/details/104241941