java如何加入事务
Java 加入事务的方法
在 Java 中,事务管理通常通过框架或原生 API 实现,以下是几种常见方式:
使用 Spring 声明式事务
通过 @Transactional 注解实现事务管理,适用于 Spring 或 Spring Boot 项目。
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void updateUser(User user) {
userRepository.save(user);
// 其他数据库操作
}
}
配置事务管理器(Spring Boot 自动配置默认已包含):
@Configuration
@EnableTransactionManagement
public class AppConfig {
// 数据源和事务管理器配置(Spring Boot 自动配置)
}
使用编程式事务
通过 TransactionTemplate 或 PlatformTransactionManager 手动控制事务:
@Service
public class UserService {
@Autowired
private TransactionTemplate transactionTemplate;
@Autowired
private UserRepository userRepository;
public void updateUser(User user) {
transactionTemplate.execute(status -> {
userRepository.save(user);
// 其他操作
return null;
});
}
}
JDBC 原生事务
直接通过 JDBC API 管理事务:
Connection conn = dataSource.getConnection();
try {
conn.setAutoCommit(false); // 开启事务
// 执行SQL操作
conn.commit(); // 提交事务
} catch (SQLException e) {
conn.rollback(); // 回滚事务
} finally {
conn.setAutoCommit(true);
conn.close();
}
JTA 分布式事务
适用于跨多个资源的事务管理(如数据库 + 消息队列):
@Inject
private UserTransaction userTransaction;
public void distributedOperation() throws Exception {
userTransaction.begin();
try {
// 操作数据库
// 操作消息队列
userTransaction.commit();
} catch (Exception e) {
userTransaction.rollback();
}
}
事务传播行为配置
Spring 的 @Transactional 支持多种传播行为,例如:
@Transactional(propagation = Propagation.REQUIRED) // 默认值,支持当前事务,不存在则新建
@Transactional(propagation = Propagation.REQUIRES_NEW) // 新建事务,挂起当前事务
@Transactional(propagation = Propagation.NESTED) // 嵌套事务
事务隔离级别配置
可指定事务隔离级别:

@Transactional(isolation = Isolation.READ_COMMITTED) // 读已提交
@Transactional(isolation = Isolation.SERIALIZABLE) // 串行化
注意事项
- 确保事务方法内的异常能被正确捕获并触发回滚(默认对
RuntimeException回滚) - 避免在事务方法中处理耗时非数据库操作
- 分布式事务需考虑性能影响,优先考虑本地事务+最终一致性方案






