目录
简介:
分类:
1.编程式事务管理:
2. 声明式事务管理:
3.事务传播和隔离级别:
配置 Spring 事务管理:
总结:
简介:
Spring 通过事务管理器(Transaction Manager)来管理事务。不同的持久化技术(如 JDBC、JPA、Hibernate)对应不同的事务管理器,例如:
DataSourceTransactionManager:用于管理 JDBC 事务。
JpaTransactionManager:用于管理 JPA 事务。
HibernateTransactionManager:用于管理 Hibernate 事务。
事务管理器是 Spring 事务管理的核心,它负责处理事务的开始、提交和回滚。
分类:
1.编程式事务管理:
编程式事务管理是指在代码中显式地管理事务,通常使用 TransactionTemplate 或者底层的 PlatformTransactionManager。
使用 TransactionTemplate:
@Autowired
private TransactionTemplate transactionTemplate;
public void someMethod() {
transactionTemplate.execute(status -> {
// 执行业务逻辑
// status.setRollbackOnly(); // 回滚事务
return null;
});
}
使用 PlatformTransactionManager:
@Autowired
private PlatformTransactionManager transactionManager;
public void someMethod() {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
// 执行业务逻辑
transactionManager.commit(status); // 提交事务
} catch (Exception e) {
transactionManager.rollback(status); // 回滚事务
}
}
2. 声明式事务管理:
声明式事务管理是通过 AOP(面向切面编程)和注解来管理事务,通常使用 @Transactional 注解。这种方式更加简洁和方便,推荐使用。
使用 @Transactional 注解:
import org.springframework.transaction.annotation.Transactional;
@Service
public class MyService {
@Transactional
public void someMethod() {
// 执行业务逻辑
}
}
3.事务传播和隔离级别:
事务传播和隔离级别是 Spring 事务管理的重要概念。
事务传播(Propagation):定义了事务方法被调用时事务的传播行为。例如,当前方法是否要在一个事务中运行,是否要加入现有的事务,或者是否要开启一个新的事务。
隔离级别(Isolation):定义了一个事务可以看到其他事务对数据的影响程度。常见的隔离级别包括:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE。
配置 Spring 事务管理:
在 Spring Boot 中,只需要在主类或者配置类中添加 @EnableTransactionManagement
注解:
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
public class AppConfig {
// 配置数据源和事务管理器等
}
使用 @Transactional 注解:
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
@Transactional
public void createUser(User user) {
// 创建用户的业务逻辑
}
}
总结:
Spring 的事务管理机制通过编程式事务管理和声明式事务管理两种方式提供了灵活的事务控制。声明式事务管理是最常用的方式,通过 @Transactional 注解,可以方便地控制事务的传播行为、隔离级别、超时时间和回滚规则。