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

来源:互联网 发布:centos7安装nginx php 编辑:程序博客网 时间:2024/06/10 04:43

事务: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(){...insertupdate...//抛出异常(只抓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支持事务,可以在事务中调用,但单独调用方法则没有事务保护



原创粉丝点击