@Transactional 事务不生效原因
1.方法不是public的 2.事务被try() catch{} 吃掉了 3.数据库引擎不支持事务 4.没有被 Spring 管理 类上面么有@service 或者@compent 5. 自身调用的问题 6. 数据源没有配置事务管理器
@Transactional 实现原理: 1) 事务开始时,通过AOP机制,生成一个代理connection对象, 并将其放入 DataSource 实例的某个与 DataSourceTransactionManager 相关的某处容器中。 在接下来的整个事务中,客户代码都应该使用该 connection 连接数据库, 执行所有数据库命令。 [不使用该 connection 连接数据库执行的数据库命令,在本事务回滚的时候得不到回滚] (物理连接 connection 逻辑上新建一个会话session; DataSource 与 TransactionManager 配置相同的数据源) 2) 事务结束时,回滚在第1步骤中得到的代理 connection 对象上执行的数据库命令, 然后关闭该代理 connection 对象。 (事务结束后,回滚操作不会对已执行完毕的SQL操作命令起作用)
上一篇:
Java基础知识总结(2021版)
下一篇:
矩阵从左上角走到右下角(dp)