Spring04事务管理-案例转账

Spring04事务管理-案例转账

1.事务管理

简单回顾

  1. 事务:一组业务操作,要么全部成功,要么全部不成功
  2. 事务有四个关键属性(特点)ACID:

原子性:一系列的动作,要么都成功,要么都失败。
一致性:数据和事务状态要保持一致。
隔离性:为了防止数据被破坏,每个事务之间都存在隔离性。
持久性:一旦事务完成, 无论发生什么系统错误, 它的结果都不应该受到影响。

1.1:Mysql事务的操作 :

在这里插入图片描述
 Mysql事务操作—Savepoint(回滚保存点)
需求:AB必须,CD可选
在这里插入图片描述

1.2三个顶级接口

 PlatformTransactionManager
 TransactionStatus
 TransactionDefinition
PlatformTransactionManager

1.PlatformTransactionManager

接口是 Spring 提供的平台事务管理器,用于管理事务。该接口中提供了三个事务操作方法,具体如下。

TransactionStatusgetTransaction(TransactionDefinition definition):用于获取事务状态信息。
void commit(TransactionStatus status):用于提交事务。
void rollback(TransactionStatus status):用于回滚事务。
在项目中,Spring 将 xml 中配置的事务详细信息封装到对象 TransactionDefinition 中,然后通过事务管理器的 getTransaction() 方法获得事务的状态(TransactionStatus),并对事务进行下一步的操作。

2.TransactionDefinition

TransactionDefinition 接口是事务定义(描述)的对象,它提供了事务相关信息获取的方法,其中包括五个操作,具体如下。
String getName():获取事务对象名称。
int getIsolationLevel():获取事务的隔离级别。
int getPropagationBehavior():获取事务的传播行为。
int getTimeout():获取事务的超时时间。
boolean isReadOnly():获取事务是否只读。
在事务管理过程中,传播行为可以控制是否需要创建事务以及如何创建事务。

通常情况下,数据的查询不会改变原数据,所以不需要进行事务管理,而对于数据的增加、修改和删除等操作,必须进行事务管理。如果没有指定事务的传播行为,则 Spring3 默认的传播行为是 required。

3.TransactionStatus

TransactionStatus 接口是事务的状态,它描述了某一时间点上事务的状态信息。其中包含六个操作
在这里插入图片描述

2.案例转账

1.准备工作需要导入Jar包

在这里插入图片描述

2. 转账基本过程:

在这里插入图片描述

3.环境搭建
  1. 创建一个数据表:account
  2. Dao层
  3. service层
  4. bean
  5. 然后测试
//account数据库表
id username money

//dao
public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao {

	@Override
	public void out(String outer, Integer money) {
		// TODO 自动生成的方法存根
       this.getJdbcTemplate().update("update account  set money= money - ? where username=?",money,outer);
	}

	@Override
	public void in(String iner, Integer money) {
		// TODO 自动生成的方法存根
		 this.getJdbcTemplate().update("update account  set money= money + ? where username=?",money,iner);
	}

//service层
public class AccountServiceImpl implements AccountService {
	
	private AccountDao accountDao;
	
	public void setAccountDao(AccountDao accountDao) {
		this.accountDao = accountDao;
	}

	@Override
	public void transfer(String outer, String iner, Integer money) {
		
		accountDao.out(outer, money);
		//断电其他操作错误
		int i=1/0;
		accountDao.in(iner, money);
	}
}

//测试
@Test
public void demo1() {
	String xmlPath="applicationContext.xml";
	ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlPath);
	AccountService accountService=(AccountService) applicationContext.getBean("accountService");
	accountService.transfer("nadou", "faker", 100);
4.AOP配置基于XML

 在spring xml 配置aop自动生成代理,进行事务管理
1. 配置管理器
2. 配置事务详情
3. 配置aop
配置applicationContext.xml

<!-- 4 事务管理 -->
             <!-- 4.1 配置事务管理器-->
                 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                   <property name="dataSource" ref="dataSource"></property>
                 </bean>
             <!-- 4.2 事务的详情(事务通知) 在aop筛选的基础上 ,对ABC三个确定使用什么事务。例如:AC读写,B只读等
                   tx:attributes 用于配置事务详情(属性)
                          tx:method name=""用于拘役配置
                                propagation:传播行为
                                isolation:隔离级别
                          
             -->
                 <tx:advice id="txAdvice" transaction-manager="txManager">
                     <tx:attributes>
                         <tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT"/>
                     </tx:attributes>
                 
                 </tx:advice>
             
             <!-- 4.3 AOP编程,目标类ABCD(4个链接点),切入点表达式确定增强的连接器,获得切入点:ABC-->
               <aop:config>
                  <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.spring03shiwuManager.service..*.*(..))"/>
               </aop:config>

将此配置加入到搭配的环境里

参照:
Spring事务管理的三个接口:https://www.jianshu.com/p/8477b58771c0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值