Spring事务学习笔记

1、Spring事务处理

Spring框架它是全面的支持事务支持,它提供一致的事务管理方式

--提供简单易用的编程式事务管理API

--支持声明式事务管理

 

1.1、编程式事务

使用编程式事务时,Spring提供以下两种事务管理的API

--TransactionTemplate

--PlatformTransactionManager

如果采用编程式事务管理,推荐使用TransactionTemplate

TransactionTemplateSpringJdbcTemplate等模板类风格相似,它也使用

回调机制,将事务代码和业务代码分离便于开发者将精力集中在具体业务编

程上。

transactionTemplate.execute(new TransactionCallback(){

public Object doInTransaction(TransactionStatus status){

//业务操作

updateOperation();

return resultOfUpdateOperation();

}

});

 

如果不需要返回值,可以创建一个TransactionCallbackWithoutResult

的匿名类。

transactionTemplate.execute(new TransactionCallbackWithoutResult{

updateOperation();

status.setRollbackOnly();

});

 

1.2、声明式事务

Spring的声明式事务管理是通过Spring AOP实现的,使用时不需要修改原有的业务代码,只需要通过简单配置就可以追加事务控制功能,大多数Spring用户选择声明式事务管理,对程序代码影响最小,也符合非侵入的理念。

 

2、注解实现声明式事务

(1)在配置文件中声明事务组件,开启事务注解扫描

<!-- 声明事务管理组件 -->

<bean id="" class="">

<property name="dataSource" ref="ds" />

</bean>

 

<!-- 开启事务注解扫描-->

<tx:annocation-driven transaction-manager="" />

transaction-manager指定事务管理器,需要根据数据库访问技术的不同选择不同的实现,例如JDBC,MyBatis技术选择DataSourceTransactionManager,而Hibernate技术则选择HibernateTransactionManager

 

(2)使用@Transactional注解

@Transactional注解标记可以用在类定义前和方法定义前

方法的事务设置将优于类级别注解的事务设置

 

@Transactional注解标记有以下属性,在使用时可以根据需要做指定

-propagation:事务传播,默认值是propagation_required

-isolation:事务隔离级别,默认值是isolation_default

-readOnly:只读/读写,默认值是可读写

-rollbackFor:遇到哪些异常回滚

-noRollbackFor:遇到哪些异常不回滚

 

注意:

任何RuntimeException将触发事务回滚, 但是任何CheckedException将不触发事务回滚。

 

 

3XML配置实现声明式事务

在配置文件中声明事务管理组件,配置事务作用的范围及类型

<!-- 声明事务管理组件-->

<bean id="" class="">

<property name="dataSource" ref="ds" />

</bean>

 

<!-- XML配置声明事务范围及类型-->

<tx:advice id=""  transaction-manager=“”>

<tx:attributes>

<tx:method name=”” propagation=””/>

<tx:method name=”” read-only=””/>

</tx:attributes>

 

</tx:advice>

 

<aop:config>

<aop:advisor advice-ref =”” pointcut=””>

</aop:config>

 

4、事务回滚

默认情况下RuntimeException异常将触发事务回滚,任何CheckedException将不触发事务回滚,常见RuntimeExceptionCheckedException如下:

RuntimeException:

NullpointException

ClassCastException

NumberFormatException

IndexOutOfBoundsException

 

CheckedException:

ClassNotFoundException

IOException

 

对于CheckedException,需要手动指定异常类型,才能实现事务回滚

--使用注解实现声明式事务,按如下方式指定异常:

@Transactional(rollbackFor=Exception.class)

 

--使用XML配置实现声明式事务时,按如下方式指定异常:

<tx:method name=“” rollback-for=>

 

当使用自定义异常,异常类只有继承RuntimeException时才会自动回滚,否则需要指定事务回滚的异常类型

 

5、事务传播

是指一个方法调用了另一个带有事务控制的方法,就需要指定事务传播的处理方案

 

6、事务隔离

在数据操作的过程中,如果两个事务并发执行,那么彼此之间的数据会发生影响,为了避免这种并发冲突,需要将这两个事务隔离开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值