转载

Transaction之坑:Spring中配置Transaction与不配置有何区别

Spring中 Transaction管理 配置有两种方式:

@Transactional
<tx:method />

Note: 以下所有讨论,都是用 @Transactional 方式来 开启Transaction支持

问题

  1. 什么样的 mehtod 需要配置注解 @Transactional
  2. method 没有配置注解 @Transactional , 难道 sql操作 就不会被 commit

解决

  1. 配置 @Transactional 的目的就是手动开启事务,保证 method 中一系列 sql操作 包含在同一事务中,从保证数据的完整性(回滚或提交)与读写安全(隔离级别);

  2. DataSource缺省 配置: defaultAutoCommit=true;

即: 如果 method 不配置 @Transactional ,则每执行一个 SQL操作,如果成功, 默认开启的事务 就会 立即 向数据库自动 commit ,而不能 rollback

  1. 为了维护 数据库的完整性 ,保证成批的 SQL 语句要么全部 commit ,要么全部 rollback 。通常包含以下 两种 方式:
    • BEGIN , ROLLBACK , COMMIT 来实现,显式地开启并控制一个 Transaction
    • 执行命令 SET AUTOCOMMIT=0 ,用来 禁止 当前会话自动 commit

method 上配置注解 @Transactional ,就是使用 第一种 方式来实现 Transaction管理 基于 SpringAOP 实现 方法增强 ,这里表现为 TransactionAspectSupport

原文  https://juejin.im/post/5da9629051882565f7660b15
正文到此结束
Loading...