包package java.sql下的Connection接口很重要。
spring事务就是基于这个接口做的。
spring事务获取连接:
screenshot-20230105-181317.png这中间涉及一个DataSource接口,当一个项目需要同时依赖多个数据源时,就需要通过实现这个接口来实现。
因为连接是一种很重的资源,所以一般都通过连接池来管理复用连接。常见的连接池有hikari、druid等。
每个数据源都交给连接池去管理,所以最终获取到的连接,是从连接池实现的DataSource中获取的。而连接池中的连接是对JDBC连接的封装。所以最终使用的Connection的实现是具体数据库厂商的JDBC实现。
以Mysql的Connection实现为例,开启事务:
image.png其实就是执行,SET autocommit=0
提交、回滚类似,最终都是依赖JDBC的Connection实现去做的,不再赘述。
更加详细的描述可以参考,写的很棒:https://zhuanlan.zhihu.com/p/383264808
网友评论