Spring - 事务处理

关于事务处理

事务为了保证数据的一致性和完整性,保证整个操作的原子性。


编程式事务

    需要在代码中直接加入事务的逻辑,可能需要在代码中显式的调用beginTransaction()、commit()、roolback()等事务管理相关的方法。

    需要在方法开始的时候开启事务,处理完后,在方法结束的时候,关闭事务。

    编程式事务侵入性较强,但处理粒度更细。

声明式事务

    在方法的外围添加注解或者直接在配置文件中定义。当方法需要处理事务,在Spring中会通过配置文件在方法的前后拦截,并添加事务。


Spring提供两种方式的编程式事务处理:

 · 使用TransactionTemplate

 · 直接使用一个PlatformTransactionManager实现


相关接口

public interface PlatformTransactionManager{
    // 返回一个已激活的事务或者创建一个新事务,返回的TransactionStatus代表当前事务的状态
    TransactionStatus getTransaction(TransactionDefinitiondefinition) throws TransactionException;  
    // 提交     
    void commit(TransactionStatus status) throws TransactionException;  
    // 回滚     
    void rollback(TransactionStatus status) throwsTransactionException; 
}
public interface TransactionDefinition{ 
     intgetPropagationBehavior();  // 返回事务的传播行为     
     int getIsolationLevel();  // 返回定义的事务的级别     
     int getTimeout();  // 返回定义的事务超时时间     
     boolean isReadOnly();  // 返回定义的事务是否是只读     
     String getName();  // 返回定义事务的名称
}
public interface TransactionStatusextends SavepointManager { 
     boolean isNewTransaction(); 
     boolean hasSavepoint(); 
     void setRollbackOnly(); 
     boolean isRollbackOnly(); 
     void flush(); 
     boolean isCompleted(); 
}

实现代码

package com.ztes.modules.test;

import org.springframework.transaction.PlatformTransactionManager;


public class SomeServiceImpl implements SomeService {
	private static PlatformTransactionManager transactionManager;

	public static PlatformTransactionManager getTransactionManager() {
		return transactionManager;
	}

	public static void setTransactionManager(
			PlatformTransactionManager transactionManager) {
		AgentServiceImpl.transactionManager = transactionManager;
	}
	
	//事务处理演示代码
	public void save() {
		DefaultTransactionDefinition def = new DefaultTransactionDefinition();
		def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
		TransactionStatus status = transactionManager.getTransaction(def);
		try {
			// 事务业务操作
			}
		} catch (Exception e) {
			transactionManager.rollback(status);//回滚
			e.printStackTrace();
		}
		transactionManager.commit(status);//提交
	}
}


本文出自 “Zero的技术之路” 博客,请务必保留此出处http://zerohou.blog.51cto.com/3019528/1615179

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。