事务的概念
事务是指一组操作,这些操作要么全部执行成功,要么全部失败回滚。在数据库中,事务是指一组 SQL 语句,这些语句要么全部执行成功,要么全部失败回滚。
Spring 事务是指在 Spring 框架中对事务进行管理的机制。Spring 事务管理器可以管理多种事务,包括 JDBC、Hibernate、JPA、JTA 等。
// 注入一个事务管理器
@Autowired
private PlatformTransactionManager transactionManager;
@Override
public String saveUser() {
// 定义一个默认是事务传播方式:如果没有事务,就开启一个事务使用。如调用方有事务,则使用调用方的事务
DefaultTransactionDefinition definition = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
// 开启事务
TransactionStatus transaction = this.transactionManager.getTransaction(definition);
try {
// todo 业务
this.transactionManager.commit(transaction); // 提交事务
} catch (Exception e) {
transactionManager.rollback(transaction); // 回滚业务 方式1
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // 回滚业务方式2
log.error("【业务失败】:触发回滚!");
}
}使用方式:
@Transactional(propagation = Propagation.REQUIRED)TransactionDefinition.PROPAGATION_REQUIRED
【白话】:默认的事务传播机制。只有被调用,就开一个新的事务。 90%的业务都用这个。
TransactionDefinition.PROPAGATION_SUPPORTS
【白话】:如有被调用者具有事务,则本方法加入(被调用者)父事务,如果被调用者没事务,则本方法以无事务(事务裸奔)运行。
TransactionDefinition.PROPAGATION_MANDATORY
【白话】:本方法调用者必须有事务,并加入到父事务中。如果调用者没事务,则抛出IllegalTransactionStateException异常。
TransactionDefinition.PROPAGATION_REQUIRES_NEW
【白话】:本方法开启一个新的的事务,如果父事务过程中遇到异常,与子事务无关。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED
【白话】:如果调用者有事务,先挂机事务,本方法不使用任何事物执行。
TransactionDefinition.PROPAGATION_NEVER
【白话】:如果调用者有事务,本方法抛出IllegalTransactionStateException异常。就是不能在事务中运行。
TransactionDefinition.PROPAGATION_NESTED
【白话】:所有的事务,交给调用者处理。事务的隔离级别
事务的超时时间