java中声明式事务最常用@transactional注解,需启用@enabletransactionmanagement或并配置platformtransactionmanager;仅对public方法生效,依赖aop代理,运行时异常自动回滚,检查异常需rollbackfor显式指定。

Java 中使用声明式事务最常用的方式是 @Transactional 注解,它由 Spring 框架提供,能以非侵入方式管理数据库操作的事务边界。
启用事务管理支持
确保 Spring 配置中启用了事务注解驱动:
- 基于 Java 配置:在配置类上添加 @EnableTransactionManagement
- 基于 XML 配置:添加
元素 - 必须配置一个 PlatformTransactionManager Bean(如 DataSourceTransactionManager 或 JpaTransactionManager)
@Transactional 的基本用法
将注解加在 public 方法或类上(推荐加在具体业务方法上),Spring 会在方法执行前后自动开启、提交或回滚事务:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 方法正常结束 → 自动提交事务
- 方法抛出 RuntimeException 或其子类(默认行为)→ 自动回滚
- 检查型异常(如 Exception)默认不触发回滚,需显式指定:rollbackFor = Exception.class
- 可设置传播行为(如 PROPAGATION_REQUIRED)、隔离级别、超时时间、只读提示等
关键注意事项
声明式事务依赖 Spring AOP 代理,因此有若干限制:
- 只能作用于 public 方法;private/protected 方法加注解无效
- 同一类中方法 A 调用本类的带 @Transactional 的方法 B → 不会生效(无代理介入)
- 事务回滚只对未捕获的异常生效;若方法内 try-catch 吞掉了异常,需手动调用 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
- 默认只对运行时异常回滚,如需对特定检查异常也回滚,务必显式配置 rollbackFor
简单示例
以下是一个典型用法:
@Service
public class UserService {
@Transactional(rollbackFor = Exception.class)
public void transferMoney(Long fromId, Long toId, BigDecimal amount) {
userDao.reduceBalance(fromId, amount); // 扣款
userDao.addBalance(toId, amount); // 入账
// 若此处抛出 Exception,上面两步将一起回滚
}
}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










