Spring中基于AOP的事务管理
1.在项目启动类上添加@EnableTransactionManagement注解,(新版本springboot不用添加)
2.在合适的类上或者方法上添加@Transactional注解
@Transcationl
当在一个业务的方法中设置一个异常时,虽然抛出了异常,但是数据还是变化了!!
当状态从0禁止变为1(启用)时我在上面设置了抛出一个异常
刷新页面后,发现数据已经发生了变化!!
当我在用户业务层添加 @Transactionl后
数据发生了回滚,禁止并没有变成启动!说明transcationl生效了
readyOnly
readyOnly只读:指定事务是否是只读事务
当在用户的业务层上注解@Transactional(readOnly = true)
如果再对用户进行增删改等操作时,就会报错
当readOnly只读默认是false,在进行查询的时候使用true可以增加效率,但是对于增删改等要使用true
rollbackFor
rollbackFor:在出现指定异常时回滚(默认RuntimeException,Error都会滚)
在改变状态的业务方法上添加rollbackFor属性,值为自定义异常;
在valid==1时,抛出此异常;检测数据是否回滚
可以看到抛出异常,并且禁用状态并没有改变,数据回滚了
noRollbackFor
noRollbackFor:出现指定异常,不发生回滚
把之前的rollbackFor改为noRollbackFor
改变状态,改变之前是禁用
抛出异常后刷新页面,状态已经变成启用了。说明虽然使用@Transactional注解,抛出了异常,但是数据并没有回滚
timeout
超出设定时间业务没有完成就回滚
isolation 事务隔离级别
如果多个事务并行执行,就会出现脏读、幻读、重复读等现象,如果不希望出现这种现象,就可以设置此属性,一般设置值为 : Isolation.READ_COMMITTED
propagation 事务的传播特性
**不同业务对象(service)**中事务方法之间相互调用时,业务的传播方式。
默认是:Propagation.REQUIRES_NEW 。指多个事务之间是同一个事务对象,其中一个事务回滚,之前的事务都会回滚
如果想让其中一个事务回滚时,其他事务不回滚;就使用 Propagation.REQUIRES_NEW
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。