达内云笔记(四)Spring事务处理

本文深入探讨了Spring框架下的事务管理机制,包括ACID特性的解释、编程式事务处理与声明式事务的区别,以及如何通过Spring AOP实现事务管理。文中还详细介绍了@Transactional注解的各种应用场景及其配置方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事务:ACID特性

原子性,一致性,隔离性和持久性

为了保证一个业务操作的完整完成,避免其他业务过程的干扰

编程式事务处理:

conn = DBUtil.getConnection();
try{
	//开始事务
	conn.setAutocomit(false);
	//业务操作过程
	select..update..delete
	//提交事务
	conn.commit;
}catch(e){
	//回滚事务
	conn.rollback();
}finally(){
	//释放资源
	conn.close();
}

Spring 利用AOP,实现了声明式业务管理:

try{
	@Before//开启事务
	利用反射调用业务方法
	@AfterReturning//提交事务
}catch(e){
	@AfterThrowing//回滚事务
}finally(){
	@After//释放资源
}
声明式事务:

@Transactional//事务注解
public updateNote(){
	...
	insert
	update
	...
	//抛出异常(只抓RuntimeException和其子类型)
	//自动回滚到Before位置
}
配置事务管理器:

<!-- 配置事务管理器:基于dataSource的事务管理器 -->
<bean id="txMgr" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 用于驱动@Transactional 注解 -->
<tx:annotation-driven transaction-manager="txMgr"/>

@Transactional的底层还是依赖AOP

@Transactional可以标注在类上,类中所有的方法都可以被事务控制

****************************************************************************

事务的属性:

@Transaction(readOnly=true) 只读属性,方法运行期间,对数据库的操作仅限于读。加此属性的优点是可以让仅查的方法提高效率。

@Transaction(isolation=Isolation.READ_COMMITTED)  只操作提交的

READ_UNCOMMITTED最低隔离(不安全性能好)

SERIALIZABLE完全串型操作(性能最差最安全)

REPEATABLE_READ可重复读取

 如果不写默认READ_COMMITTED,一般使用这个。

@Transaction(propagation=Propagation.REQUIRED) 一个事务与多个事务连成一个整体,默认值为REQUIRED。当业务层中调用业务层方法时,多个事务会合并成一个事务。

REQUIRES_NEW属性表示必须创建新事务,如果当前有事务,则当前事务挂起。

NEVER绝不参加事务。

REQUIRES_NESTED 嵌套,事务必须潜逃到其他事务中。

MANDATORY不能参与事务。

NOT_SUPPORTED不支持,可以在事务中调用,但是不参与不支持事务,会抛异常。

SUPPORTS支持事务,可以在事务中调用,但单独调用方法则没有事务保护



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值