@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操作命令起作用)
经验分享 程序员 微信小程序 职场和发展