一。编程事务
@Component
public class TransactionUtils {
//获取数据源
private DataSourceTransactionManager dataSourceTransactionManager;
//开启事务
public TransactionStatus begin(){
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());
return transactionStatus;
}
/*提交事务*/
public void commit(TransactionStatus transactionStatus){
dataSourceTransactionManager.commit(transactionStatus);
}
/*回滚事务*/
public void rollBack(TransactionStatus transactionStatus){
dataSourceTransactionManager.commit(transactionStatus);
}
}
二。事务配置
- 步骤一:spring文件
<!-- 定义事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
步骤二:在需要的类似加@Transactional
@Override
@Transactional
public int addExamRegion(ExamRegionDto examRegionDto) {
System.out.println("进入增加考区service");
}
三。获取当前事务收到进行回滚
写在service层
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
四。事务的特性 ACID
原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务前后数据的完整性必须保持一致。
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
五。事务的传播性
在service中,A方法调用B方法, A加了事务控制,那么A的事务会传播到B