一、概念
-
1.1 事务
- 事务是数据库操作最基本的单元,逻辑上的一组操作要么都成功,如果有一个失败所有操作都失败。
- 典型场景-银行转账
- Lucy转账100给Mary
- Lucy少100,Mary多100
-
1.2 事务的四个特性
- 原子性:要么都成功,如果有一个失败所有操作都失败
- 一致性:Lucy和Mary各有100,两人共有200,Lucy把100给Mary,Lucy是0,Mary是200,和仍是200
- 隔离性:多事务操作之间相互不影响
- 持久性:提交事务后,不再变化
二、事务(Spring事务管理介绍)
三、事务操作(注解声明式事务管理)
-
3.1 使用@Bean创建置事务管理器对象
@Bean public DataSourceTransactionManager dataSourceTransactionManager(){ DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(); DataSource dataSource = dataSource(); dataSourceTransactionManager.setDataSource(dataSource); return dataSourceTransactionManager; }
-
3.2 在配置类SpringConfig上添加注解@EnableTransactionManagement
@EnableTransactionManagement
设置当前Spring环境中开启注解式事务支持
-
3.3 在 service 类上面(或者 service 类里面方法上面)添加事务注解
@Transactional
,这个注解添加到类上面,也可以添加方法上面- 如果把这个注解添加类上面,这个类里面所有的方法都添加事务
- 如果把这个注解添加方法上面,为这个方法添加事务
四、事务操作(声明式事务管理参数配置)
-
4.1 在 service 类上面添加注解@Transactional,在这个注解里面可以配置事务相关参数
@AliasFor("value") String transactionManager() default ""; String[] label() default {}; Propagation propagation() default Propagation.REQUIRED; Isolation isolation() default Isolation.DEFAULT; int timeout() default -1; String timeoutString() default ""; boolean readOnly() default false; Class<? extends Throwable>[] rollbackFor() default {}; String[] rollbackForClassName() default {}; Class<? extends Throwable>[] noRollbackFor() default {}; String[] noRollbackForClassName() default {};
- REMARK
propagation
:事务的传播行为isolation
:隔离级别timeout
:超时时间readOnly
:只读rollbackFor
noRollbackFor
- REMARK
-
4.2
propagation
:事务的传播行为- 当一个事务方法被另一个事务方法调用的时候,这个方法如何运行
- 当一个事务方法被另一个事务方法调用的时候,这个方法如何运行