Spring事务抽象
Spring事务抽象的关键是由org.springframework.transaction.PlatformTransactionManager接口定义的,如下所示:
public interface PlatformTransactionManager {
TransactionStatus getTransaction(TransactionDefinition definition);
throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
方法与说明:
- TransactionStatus getTransaction(TransactionDefinition definition) - 此方法根据指定的传播行为返回当前活动的事务或创建一个新的事务。
- void commit(TransactionStatus status) - 此方法根据其状态落实给定的事务。
- void rollback(TransactionStatus status) - 此方法执行给定事务的回滚。
TransactionDefinition的是Spring中的事务支持的核心接口,并将其定义如下
public interface TransactionDefinition {
int getPropagationBehavior();
int getIsolationLevel();
String getName();
int getTimeout();
boolean isReadOnly();
}
方法与说明:
- int getPropagationBehavior() - 此方法返回传播行为。Spring提供了EJB CMT熟悉的所有事务传播选项。
- int getIsolationLevel()) - 此方法返回此事务与其他事务的工作隔离的程度。
- String getName()) - 此方法返回此事务的名称。
- int getTimeout()) - 此方法以秒为单位返回必须完成事务的时间。
- boolean isReadOnly()) - 此方法返回事务是否为只读。
以下是隔离级别的可能值
- TransactionDefinition.ISOLATION_DEFAULT - 这是默认的隔离级别。
- TransactionDefinition.ISOLATION_READ_COMMITTED - 指示防止脏读;可能会发生不可重复的读取和幻像读取。
- TransactionDefinition.ISOLATION_READ_UNCOMMITTED - 表示可能发生脏读,不可重复读和幻像读。
- TransactionDefinition.ISOLATION_REPEATABLE_READ - 指示防止脏读和不可重复读;幻像读取可能发生。
- TransactionDefinition.ISOLATION_SERIALIZABLE - 指示防止脏读,不可重复读和幻像读。
以下是传播类型的可能值
- TransactionDefinition.PROPAGATION_MANDATORY - 支持当前事务;如果当前事务不存在,则引发异常。
- TransactionDefinition.PROPAGATION_NESTED - 如果当前事务存在,则在嵌套事务中执行。
- TransactionDefinition.PROPAGATION_NEVER - 不支持当前事务;如果当前事务存在,则引发异常。
- TransactionDefinition.PROPAGATION_NOT_SUPPORTED - 不支持当前事务;而是始终以非事务方式执行。
- TransactionDefinition.PROPAGATION_REQUIRED - 支持当前事务;如果不存在,则创建一个新的。
- TransactionDefinition.PROPAGATION_REQUIRES_NEW - 创建一个新事务,如果存在则暂停当前事务。
- TransactionDefinition.PROPAGATION_SUPPORTS - 支持当前事务;如果不存在,则以非事务方式执行。
- TransactionDefinition.TIMEOUT_DEFAULT - 使用基础事务系统的默认超时;如果不支持超时,则不使用默认超时。
TransactionStatus接口为处理事务的代码来控制事务执行和查询事务状态的简单方法。
public interface TransactionStatus extends SavepointManager {
boolean isNewTransaction();
boolean hasSavepoint();
void setRollbackOnly();
boolean isRollbackOnly();
boolean isCompleted();
}
方法说明:
- boolean hasSavepoint() - 此方法返回此事务是否在内部携带保存点,即是否已基于保存点将其创建为嵌套事务。
- boolean isCompleted() - 此方法返回此事务是否完成,即它是否已经提交或回滚。
- boolean isNewTransaction() - 如果当前事务是新的,则此方法返回true。
- boolean isRollbackOnly() - 此方法返回事务是否已标记为仅回滚。
- void setRollbackOnly()) - 此方法将事务设置为仅回滚。