1、传播属性:当事务方法被另一个事务方法调用时, 必须指定事务应该如何传播.
REQUIRED 传播行为 默认的
当 bookService 的 purchase() 方法被另一个事务方法 checkout() 调用时, 它默认会在现有的事务内运行. 这个默认的传播行为就是 REQUIRED. 因此在 checkout() 方法的开始和终止边界内只有一个事务. 这个事务只在 checkout() 方法结束的时候被提交, 结果用户一本书都买不了
事务传播属性可以在 @Transactional 注解的 propagation 属性中定义
REQUIRES_NEW 传播行为
它表示该方法必须启动一个新事务, 并在自己的事务内运行. 如果有事务在运行, 就应该先挂起它.
2、隔离级别
用 @Transactional 注解声明式地管理事务时可以在 @Transactional 的 isolation 属性中设置隔离级别.
3、回滚 通常取默认值即可
默认情况下只有未检查异常(RuntimeException和Error类型的异常)会导致事务回滚. 而受检查异常不会.
事务的回滚规则可以通过 @Transactional 注解的 rollbackFor 和 noRollbackFor 属性来定义.
4、只读 使用readOnly设置
表示这个事务只读取数据但不更新数据, 这样可以帮助数据库引擎优化事务.
5.过期 使用timeout指定强制回滚之前事务可以 占用的时间