Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TransactionService {
@Autowired
private SomeRepository someRepository;
// 自动回滚示例
@Transactional
public void autoRollback() {
someRepository.save(new SomeEntity("Entity1"));
throw new RuntimeException("发生异常,自动回滚事务");
}
// 手动回滚示例
@Transactional
public void manualRollback() {
try {
someRepository.save(new SomeEntity("Entity2"));
// 模拟发生异常,需要手动回滚
throw new RuntimeException("发生异常,手动回滚事务");
} catch (RuntimeException e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
// 部分回滚示例
@Transactional
public void partialRollback() {
try {
someRepository.save(new SomeEntity("Entity3"));
// 模拟可以成功执行的操作
someRepository.save(new SomeEntity("Entity4"));
// 模拟发生异常,导致部分操作回滚
throw new RuntimeException("发生异常,部分回滚事务");
} catch (RuntimeException e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
}
在这个示例中,我们定义了一个TransactionService
类,它包含了自动回滚、手动回滚和部分回滚的操作。SomeRepository
是一个假设的仓库接口,你需要根据实际情况替换为你的实体仓库接口。SomeEntity
是一个假设的实体类,同样需要替换为你的实体类。这个示例展示了如何在Spring Boot中使用注解来声明事务,并在需要时手动回滚事务。
评论已关闭