事务前序
- 接口
- 实现类
例子
- 数据库表
- 数据层接口
- 业务层接口
- 业务层实现类
- 测试用例
如果程序正常执行,转账就扣原账户钱,后账户加钱。
但是如果程序出现异常,转账操作出现了问题,此时转账扣钱了,但是新的账户中并没有加钱,就会导致整体的业务失败。
这个时候就需要使用 事务:要么全部成功,要么就全部不成功,就不会出现数据不统一的情况。
- @Transactional:开启事务、写在接口上,不写在实现类中。
@Transactional
public void transfer(String out,String in,Double money);
- 开启事务后,指定事务管理器类型【JdbcConfig】
通过Spring的Bean注入,通过形参来注入复杂数据类型。
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager
}
- 告诉Spring,我们使用注解式驱动
@EnableTransactionManagerment
补充
前面我们说,开启事务在 接口中开启。但是接口中可能会存在多个抽象方法,那么到底是先执行哪一个呢?
我们将这两个接口方法,在共同依赖的一个方法中,进行开启事务,这样就可以实现两个事务一起操作,实现一起成功、一起失败。