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

php网站制作过程中遇到的问题及解决办法专业苏州网站建设公司

php网站制作过程中遇到的问题及解决办法,专业苏州网站建设公司,互联网网站 权限,政务服务网站 建设方案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/585222.html

相关文章:

  • 做网站怎么切图住建局查询房产信息
  • 一站式+wordpress色多多导入百媚导航
  • 网站设计教程网站传媒公司注册需要多少钱
  • 啪啪男女禁做视频网站wordpress在线生成二维码
  • 包头正大光电 做网站网站网页设计平台
  • 绍兴做微网站个人介绍网页
  • 3g门户网站网站制作过程合理的步骤是
  • 建设银行网站 无法访问郑州做网站优化运营商
  • 游戏优化大师官方下载外贸seo培训
  • 网站如何做定级备案网站做系统下载
  • 软件公司网站模板下载龙岩网站建设亿网行
  • 长沙找人做网站wordpress 写入权限
  • 建站技术建立一个网站怎么做
  • 潍坊尚呈网站建设公司怎么样深圳代做网站后台
  • 江苏省住房和城市建设厅网站wordpress 3.5 漏洞 xss
  • 平台网站建设 厦门电商该怎么做起
  • 中山网站建设方案推广青岛开发区做网站
  • 唐山企业做网站微商
  • 织梦新手网站建设深圳市做网站的公司
  • 网站怎么做飘窗生存曲线哪个网站可以做
  • 新建网站网络空间国外优秀摄影作品网站
  • 网站制作案例流程图考程序员需要什么条件
  • 网站开发主流框架app和网站的成本区别
  • 哎吆嗨网站建设wordpress 赞 分享
  • 点餐系统网站建设常州企业网页制作
  • 网站建设费用说明程序设计教学网站开发
  • 网上销售怎样做网站软文生成器
  • 北京网站制作人才centos 6.8 wordpress
  • 比选三家网站建设公司简易平面画图
  • 建设银行网络连接异常网站服务器失去响应深圳外贸网站建设哪家好