代码来自https://blog.csdn.net/weixin_42950079/article/details/99674292
可以看出jdbc的一个事务有这么几个步骤:1.关闭sql自动提交;2.提交sql;3.提交事务,抛出异常回滚
Spring的@Transactional本质是做一个切面把上面这些事除了sql语句部分干了,然后开发只需要写sql代码即可
Spring事务管理器底层参见https://blog.csdn.net/cccmercy/article/details/81584826
对于分布式事务,也可以自己写一个注解实现AOP:
1.接收需要组合在一起的数据源对应的事务管理器id
2.在执行业务方法之前,通过这些事务管理器,手动开启事务
3.执行业务方法
4.业务方法执行完毕之后,再使用这些事务管理器,手动提交事务
5.如果业务方法抛出异常:判断是否不需要回滚事务,如果不需要回滚,则提交事务;否则回滚
事实上,这也就是为什么分布式事务会有额外的中间件