共计 989 个字符,预计需要花费 3 分钟才能阅读完成。
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
正文完