您现在的位置是:主页 > news > 企业门户网站的建设与实现论文/app推广团队
企业门户网站的建设与实现论文/app推广团队
admin2025/6/21 6:39:23【news】
简介企业门户网站的建设与实现论文,app推广团队,安全的网站制作公司,记事本可以做网站吗Spring不直接管理事务,它提供了事务管理器,但是具体相关管理职责由 Hibernate、MyBatis 等持久层框架实现。由这些持久层框架实现与数据库服务的通信。Transactional使用Spring提供的事务框最普遍的方式是 在事务方法上添加标记 Transactional࿰…
Spring不直接管理事务,它提供了事务管理器,但是具体相关管理职责由 Hibernate、MyBatis 等持久层框架实现。由这些持久层框架实现与数据库服务的通信。
@Transactional
使用Spring提供的事务框最普遍的方式是 在事务方法上添加标记 @Transactional,并设置相关属性。如:
@Transactional(propagation=Propagation.REQUIRED,
isolation=Isolation.REPEATABLE_READ)
public void runInTransaction() {
...
}
public @interface Transactional {
// 事务的 名称
String value default "";
// 事务的 传播方式
Propagation propagation() default Propagation.REQUIRED;
// 事务的 隔离级别
Isolation isolation() default Isolation.DEFAULT;
// 事务的 超时时长
int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;
// 事务是否 只读
boolean readOnly() default false;
// 遇到这些异常时 触发事务回滚。默认遇到 RuntimeException 和 Error 时回滚;受检异常不回滚。
Class extends Throwable>[] rollbackFor() default();
// 其它回滚机制设置
String[] rollbackForClassName() default {};
Class extends Throwable>[] noRollbackFor() default {};
String[] noRollbackForClassName() default {};
}
PlatformTransactionManager
PlatformTransactionManager 是 Spring 事务管理架构中的中央接口。
实际使用时一般通过注解的形式(AOP)使用,而不是直接调用这些方法。
public interface PlatformTransactionManager {
// 获取事务的状态
TransactionStatus getTransaction(TransactionDefinition definition);
// 提交事务
void commit(TransactionStatus status);
// 回滚事务
void rollback(TransactionStatus status)
}
TransactionDefinition
TransactionDefinition 定义了事务的一些属性,包括“传播行为”、“隔离级别”、“是否只读”、“超时时长”、“名称”。
这些属性会在 Spring事务管理机制 中被使用。
传播行为 用于处理事务嵌套的情况;
隔离级别 用于处理事务并发的情况;
事务 超时时长 表示允许事务执行的最长时间。如果事务超时未完成,就会自动回滚;
事务 只读 表示对事务性资源只读。如果确定事务只包含读操作,可将其标记为只读,以提高性能。
public interface TransactionDefinition {
// 获取事务的 传播行为
int getPropagationBehavior();
// 获取事务的 隔离级别
int getIsolationLevel();
// 获取事务的 超时时长
int getTimeout();
// 判断事务 是否只读
boolean isReadOnly();
// 获取事务 名称
String getName();
}
TransactionStatus
TransactionStatus 提供了一组方法用于获取事务的状态。
public interface TransactionStatus {
// 判断事务 是否为新建的事务
boolean isNewTransaction();
// 判断事务 是否有保存点
boolean hasSavepoint();
// 将事务设置为 只回滚
void setRollbackOnly();
// 判断事务 是否为只回滚
boolean isRollbackOnly();
// 判断事务 是否已完成
boolean isCompleted();
}
Spring 支持的事务隔离级别
对事务的支持是由数据库提供的。Spring 只是个框架,它方便我们使用数据库提供的事务特性。
SQL-1992 中定义的4个隔离级别在Spring中都有对应的标识。
此外Spring还提供了一个隔离级别标识,Isolation_Default,用于使用数据库默认的隔离级别。
Spring 的事务传播行为控制
Spring 的事务传播行为控制机制用于支持业务层中的事务嵌套场景。
当一个事务方法被另一个事务方法调用时,这个被调用的事务方法可能需要在当前事务中运行,也有可能需要新开一个事务运行。
Spring定义了 7种 事务传播行为:
支持当前事务的传播行为
Propagation_Required:如果当前存在事务,则加入当前事务;否则创建一个新事务。(默认)
Propagation_Supports:如果当前存在事务,则加入当前事务;否则以非事务的方式运行。
Propagation_Mandatory:如果当前存在事务,则加入当前事务;否则抛出异常。
不支持当前事务的传播行为
Propagation_Requires_New:创建一个新事务。如果当前已经有事务,则挂起当前事务。
Propagation_Not_Supported:以非事务方式运行。如果当前已经有事务,则挂起当前事务。
Propagation_Never:以非事务方式运行。如果当前已经有事务,则抛出异常。
其它传播行为
Propagation_Nested:如果当前存在事务,则创建一个新事务作为嵌套事务运行;否则创建一个新事务。
前 6种 传播行为借鉴自EJB,概念相同。PROPAGATION_NESTED 是 Spring 特有的。
内嵌事务基于JDBC的 SavePoint 实现。
只有外部事务提交,内嵌事务才能提交。
外部事务回滚,会引起内嵌事务回滚。