Spring/SpringBoot中的声明式事务和编程式事务源码、区别、优缺点、适用场景、实战( 三 )


四、优缺点1、声明式事务声明式事务通常通过AOP技术实现 , 在方法或类级别上声明事务属性 。声明式事务的优点包括:
简化代码:开发人员只需要关注业务逻辑 , 而无需手动管理事务 , 可以减少代码复杂度和工作量 。
可配置性强:事务属性可以通过XML文件、注解等方式进行配置 , 灵活方便 。
易于扩展:可以通过AOP技术轻松地扩展使其支持新的事务策略 。
声明式事务存在以下缺点:
限制较大:事务属性需要在方法或类级别进行声明 , 这可能会导致某些情况下难以满足特定的业务需求 。
难以调试:由于事务是在AOP层面进行管理的 , 因此在调试时可能难以追踪事务管理的具体细节 。
2、编程式事务编程式事务通常通过API接口实现 , 开发人员可以在代码中显式地管理事务 。
编程式事务的优点包括:
灵活性强:开发人员可以在代码中根据具体业务需要来控制事务的具体范围和属性 。
易于调试:由于事务管理在代码层面上实现 , 因此开发人员可以很容易地追踪事务管理的细节 。
编程式事务存在以下缺点:
代码复杂度高:需要在代码中手动处理事务 , 并处理各种异常情况 , 可能会增加代码的复杂度和工作量 。
可配置性差:事务的范围和属性需要在代码中显式声明 , 这可能会导致一些特定的业务需求难以满足 。
总之 , 声明式事务和编程式事务各有优缺点 。开发人员需要根据具体业务需求和场景选择使用合适的事务管理方式 。
五、使用场景声明式事务通常适用于以下场景:

  • 大型企业级应用程序 , 需要管理多个事务 。
  • 代码结构比较复杂 , 使用声明式事务可以更好地管理和维护代码(大事务参考上方的方案) 。
  • 声明式事务可以将事务管理与业务逻辑分离 , 从而使得应用程序更加松耦合 。
而编程式事务通常适用于以下场景:
  • 需要更精确地控制事务的范围和处理逻辑 。
  • 编程式事务通常比声明式事务更加灵活 , 可以根据业务逻辑的需要来自定义事务的范围、隔离级别以及回滚机制等 。
  • 在某些高并发场景下 , 可以使用编程式事务仅针对需要操作的数据进行锁定 , 而不是对整个业务逻辑加事务 。
在实际场景中 , 可以根据需求综合考虑使用声明式事务和编程式事务的优势来进行选择 。
根据不同的用户量来具体选择 , 在几乎没有并发量的系统设计一条异步编排反而大材小用 , 可能造成资源的浪费;但是有需要等待远程API的响应时 , 使用异步编排可以将等待时间最小化 , 并使得应用程序不必阻塞等待API响应 , 从而提高用户体验 。
很多事情没有绝对化 , 只有相对化 , 只要能支持现有正常的使用 , 不管什么样的设计都是没问题的! 可能好的设计会使系统在经受并发量增大的过程中无感 , 还是要调研清楚 , 从而设计出更好的方案 , 防止资源浪费!
尽管小编还没有什么架构经验 , 但还是对架构充满兴趣 , 不想做架构师的开发不是好开发哈!!当然你也可以走管理!!
六、实战1、声明式事务这里就简单模拟一下 , 为了模拟报错 , 把OperIp设置为唯一!
@Transactional(rollbackFor = Exception.class)大家经常使用 , 就不多演示了!
 @Transactional(rollbackFor = Exception.class)@Overridepublic void template() {SysLog sysLog = new SysLog();sysLog.setOperIp("123");SysLog sysLog1 = new SysLog();sysLog1.setOperIp("hhh");log.info("插入第一条数据开始========");testMapper.insert(sysLog);log.info("插入第一条数据完成========");log.info("插入第二条数据开始========");testMapper.insert(sysLog);log.info("插入第二条数据完成========");}此时数据没有数据 , 全部回滚成功!
Spring/SpringBoot中的声明式事务和编程式事务源码、区别、优缺点、适用场景、实战

文章插图
2、编程式事务首先注入TransactionTemplate:


推荐阅读