4.Spring-事务

89 阅读1分钟

事务前序

  1. 接口

图片.png

  1. 实现类

图片.png

例子

图片.png

  1. 数据库表

图片.png

  1. 数据层接口

图片.png

  1. 业务层接口

图片.png

  1. 业务层实现类

图片.png

  1. 测试用例

图片.png

如果程序正常执行,转账就扣原账户钱,后账户加钱。
但是如果程序出现异常,转账操作出现了问题,此时转账扣钱了,但是新的账户中并没有加钱,就会导致整体的业务失败。

这个时候就需要使用 事务:要么全部成功,要么就全部不成功,就不会出现数据不统一的情况。

  1. @Transactional:开启事务、写在接口上,不写在实现类中。
@Transactional
public void transfer(String out,String in,Double money);
  1. 开启事务后,指定事务管理器类型【JdbcConfig】

通过Spring的Bean注入,通过形参来注入复杂数据类型。

@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
    DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
    transactionManager.setDataSource(dataSource);
    return transactionManager
}
  1. 告诉Spring,我们使用注解式驱动
@EnableTransactionManagerment

图片.png

补充

前面我们说,开启事务在 接口中开启。但是接口中可能会存在多个抽象方法,那么到底是先执行哪一个呢?

图片.png

图片.png

我们将这两个接口方法,在共同依赖的一个方法中,进行开启事务,这样就可以实现两个事务一起操作,实现一起成功、一起失败。

图片.png 图片.png

事务相关配置

图片.png