当前位置: 首页 > wzjs >正文

多语言网站巩义网络推广公司

多语言网站,巩义网络推广公司,上海监理建设协会网站,中国建设工程安全管理协会网站Spring Boot 七种事务传播行为支持部分回滚的分析 支持部分回滚的传播行为 REQUIRES_NEW:始终开启新事务,独立于外部事务,失败时仅自身回滚。NESTED:在当前事务中创建保存点(Savepoint),可局部…

Spring Boot 七种事务传播行为支持部分回滚的分析

支持部分回滚的传播行为
  • REQUIRES_NEW:始终开启新事务,独立于外部事务,失败时仅自身回滚。
  • NESTED:在当前事务中创建保存点(Savepoint),可局部回滚到保存点,不影响外部事务整体提交。

代码示例:使用 REQUIRES_NEW 实现部分回滚

1. 交易服务层(独立事务)
@Service
public class TransactionService {@Autowiredprivate TradeRepository tradeRepository;// 使用 REQUIRES_NEW,每个交易独立事务@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)public void processTrade(Trade trade) {try {// 模拟业务逻辑(如保存交易)tradeRepository.save(trade);if (trade.getId() == 3) { // 模拟交易3失败throw new RuntimeException("Transaction 3 failed");}} catch (Exception e) {// 本地异常处理,但事务仍会回滚throw e;}}
}
2. 批量任务协调者
@Service
public class BatchProcessor {@Autowiredprivate TransactionService transactionService;// 批量任务不开启事务(NOT_SUPPORTED)@Transactional(propagation = Propagation.NOT_SUPPORTED)public void executeBatch(List<Trade> trades) {for (Trade trade : trades) {try {transactionService.processTrade(trade);} catch (Exception e) {// 记录错误但继续处理其他交易System.out.println("Trade " + trade.getId() + " failed!");}}}
}
3. 测试用例
@SpringBootTest
public class BatchTest {@Autowiredprivate BatchProcessor batchProcessor;@Autowiredprivate TradeRepository tradeRepository;@Testpublic void testBatchProcessing() {List<Trade> trades = Arrays.asList(new Trade(1, "Success1"),new Trade(2, "Success2"),new Trade(3, "Failed")  // 交易3会失败);batchProcessor.executeBatch(trades);// 验证:交易1和2已提交,交易3未提交assertEquals(2, tradeRepository.count());}
}

代码示例:使用 NESTED 实现部分回滚

1. 交易服务层(嵌套事务)
@Service
public class TransactionService {@Autowiredprivate TradeRepository tradeRepository;// 使用 NESTED,在外部事务中创建保存点@Transactional(propagation = Propagation.NESTED, rollbackFor = Exception.class)public void processTradeWithNested(Trade trade) {try {tradeRepository.save(trade);if (trade.getId() == 3) {throw new RuntimeException("Transaction 3 failed");}} catch (Exception e) {throw e; // 回滚到保存点,但外部事务可继续提交其他交易}}
}
2. 批量任务协调者(需开启外部事务)
@Service
public class BatchProcessor {@Autowiredprivate TransactionService transactionService;// 开启外部事务(REQUIRED)@Transactional(propagation = Propagation.REQUIRED)public void executeBatchWithNested(List<Trade> trades) {for (Trade trade : trades) {try {transactionService.processTradeWithNested(trade);} catch (Exception e) {System.out.println("Trade " + trade.getId() + " failed!");// 继续处理其他交易}}// 手动提交外部事务(可选,但通常由Spring自动管理)}
}

传播行为对比表格

传播行为是否支持部分回滚适用场景代码示例方法
REQUIRED❌ 不支持继承父事务,失败时所有操作回滚-
REQUIRES_NEW✅ 支持独立事务,失败不影响其他交易processTrade()
SUPPORTS❌ 不支持无事务或依赖父事务-
NOT_SUPPORTED❌ 不支持挂起父事务,无事务执行-
MANDATORY❌ 不支持必须存在父事务-
NEVER❌ 不支持禁止存在父事务-
NESTED✅ 支持在父事务中创建保存点,局部回滚processTradeWithNested()

关键说明

  1. REQUIRES_NEW

    • 每个交易独立开启事务,失败时仅自身回滚,其他交易不受影响。
    • 适用场景:完全独立的交易,彼此无依赖。
  2. NESTED

    • 在父事务中创建保存点,失败时回滚到保存点,但父事务仍可提交。
    • 适用场景:交易间有弱关联,需局部回滚但整体提交成功。

注意:使用 NESTED 需确保数据库和驱动支持保存点(如MySQL/PostgreSQL)。

http://www.dtcms.com/wzjs/492664.html

相关文章:

  • 爱名网做网站教程淘宝指数在哪里查询
  • 如何用魔方网表做门户网站百度关键词搜索怎么弄
  • 网站开发案例php重庆网站关键词排名优化
  • 湘潭城乡建设发展集团网站网络推广怎么做效果好
  • 营销型网站建设系统优化方法
  • 如果制作个人网站网页浏览器
  • 国外买东西的网站有哪些优化大师客服
  • 营销型商务网站湖南网站推广公司
  • 网站icp备案怎么做搜易网优化的效果如何
  • 东莞公司企业设计网站建设网站推广app
  • 做网站高流量赚广告费重庆人力资源和社会保障网
  • 如何做cad图纸模板下载网站结构优化是什么意思
  • ps切片工具做网站建立网站需要什么
  • 杭州企业公司网页设计北京搜索引擎优化主管
  • wordpress显示注册用户兰州网络推广优化服务
  • 新开传奇网站合击万州网站建设
  • 做平面的公司网站青岛网站关键词优化公司
  • 大连网站建设 领超最好seo教程技术资源
  • 如何取消wordpress限制石家庄seo排名公司
  • 眉山网站建设公司优就业seo课程学多久
  • 建筑模板的规格及价格seo域名如何优化
  • 西安企业网站排名优化工具网络推广软文怎么写
  • 在西部数码上再备案一个网站ftp广州seo软件
  • 网站建设记入什么科目最新全国疫情消息
  • 黄网网站是怎么做的咨询公司
  • 制作链接怎么做百度怎么优化网站排名
  • 网站长期建设运营计划书北京网站建设运营
  • 网站开发实验报告百度指数是什么
  • 网站前端是做啥的wix网站制作
  • 最有效的网站推广设计沧州网站优化