@Transactional 详解

基于@Transactional注解
@Transactional实质是使用了JDBC的事务来进行事务控制的
@Transactional基于Spring的动态代理的机制
@Transactional实现原理
1)事务开始时,通过AOP机制,生成一个代理connection对象,并将其放入DataSource实例的某个与DataSourceTransactionManager相关的某处容器中。在接下来的整个事务中,客户代码都应该使用该connection连接数据库,执行所有数据库命令[不使用该connection连接数据库执行的数据库命令,在本事务回滚的时候得不到回滚](物理连接connection逻辑上新建一个会话session;DataSource与TransactionManager配置相同的数据源)
2)事务结束时,回滚在第1步骤中得到的代理connection对象上执行的数据库命令,然后关闭该代理connection对象(事务结束后,回滚操作不会对已执行完毕的SQL操作命令起作用)

声明式事务的管理实现本质:
事务的两种开启方式
显示开启start transaction | begin,通过 commit | rollback 结束事务
关闭数据库中自动提交 autocommit set autocommit = 0;MySQL 默认开启自动提交;通过手动提交或执行回滚操作来结束事务
Spring 关闭数据库中自动提交:在方法执行前关闭自动提交,方法执行完毕后再开启自动提交

// org.springframework.jdbc.datasource.DataSourceTransactionManager.java 源码实现
// switch to manual commit if

相关推荐

  1. @Transactional 详解

    2024-04-09 22:28:05       12 阅读
  2. 【数据库】@Transactional用法详解

    2024-04-09 22:28:05       43 阅读
  3. @Transaction注解详情解释

    2024-04-09 22:28:05       10 阅读
  4. Redis中transactions命令详解

    2024-04-09 22:28:05       10 阅读
  5. 关于Spring @Transactional事务传播机制详解

    2024-04-09 22:28:05       34 阅读
  6. 事务(transaction)

    2024-04-09 22:28:05       24 阅读
  7. SQL Server事务(Transaction

    2024-04-09 22:28:05       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 22:28:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 22:28:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 22:28:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 22:28:05       18 阅读

热门阅读

  1. 雷军给年轻人的五点建议

    2024-04-09 22:28:05       10 阅读
  2. playwright入门-相遇(基础篇)

    2024-04-09 22:28:05       13 阅读
  3. 热更新框架2-能够使用框架进行开发

    2024-04-09 22:28:05       12 阅读
  4. Redis是单线程,但为什么快

    2024-04-09 22:28:05       12 阅读