1.添加事物注解
如果不添加事务,在余额不足的情况下,库存会减,但余额不会再减
2.使用propagation 指定事务的传播行为,即当前事务方法被另外一个事务方法法调用时,如何使用事务
默认取值为REQUIRED,即使用调用方法的事务
3.REQUIRES_NEW另一种常见的传播行为,它表示该方法必须启动一个新事务,并在自己的事务内运行,如果有事务在运行,就应该挂起它。
4.使用isolation指定事务的隔离级别,最常用的取值为 READ_COMMITTED读已提交
5.默认情况下spring的声明式事务对所有的运行异常进行回滚,也可以通过对应的属性进行设置
通常情况下取默认值即可
6.readonly指定事务是否为只读,表示这个事务读取数据但不更新数据,
这样可以帮助数据库引擎优化事务
isolation=Isolation.READ_COMMITTED,
noRollbackFor={UserAccountException.class}
isolation=Isolation.READ_COMMITTED,
readOnly=false,
timeout=1
)
如果不添加事务,在余额不足的情况下,库存会减,但余额不会再减
2.使用propagation 指定事务的传播行为,即当前事务方法被另外一个事务方法法调用时,如何使用事务
默认取值为REQUIRED,即使用调用方法的事务
3.REQUIRES_NEW另一种常见的传播行为,它表示该方法必须启动一个新事务,并在自己的事务内运行,如果有事务在运行,就应该挂起它。
4.使用isolation指定事务的隔离级别,最常用的取值为 READ_COMMITTED读已提交
5.默认情况下spring的声明式事务对所有的运行异常进行回滚,也可以通过对应的属性进行设置
通常情况下取默认值即可
6.readonly指定事务是否为只读,表示这个事务读取数据但不更新数据,
这样可以帮助数据库引擎优化事务
timeout=1 这个事务在强制回滚之前,最多可以占多长时间,防止事务对连接占据的时间过长,提高性能
isolation=Isolation.READ_COMMITTED,
noRollbackFor={UserAccountException.class}
)
isolation=Isolation.READ_COMMITTED,
readOnly=false,
timeout=1
)