百万架构师第十七课:源码分析:Spring 源码分析:Spring声明式事务操作实现原理|JavaGuide
2025/1/14 6:03:20
本文主要是介绍百万架构师第十七课:源码分析:Spring 源码分析:Spring声明式事务操作实现原理|JavaGuide,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
上
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
transactionManager
就是我们的一个切面dataSource
其实就是我们Connection
的一个包装,就是所有的Connection
相关的东西。javax.sql.DataSource
其实定义了,提供给我们的 JDBC 框架去扩展的包装类。
public interface DataSource extends CommonDataSource, Wrapper { Connection getConnection() throws SQLException; Connection getConnection(String username, String password) throws SQLException; }
DataSource 的一些配置
@Resource(name = "dataSource") protected void setDataSource(DataSource dataSource) { template = new JdbcTemplate(dataSource); // Statement statement; // statement.e // 相当于开启事务,创建Socket连接 // 当我们execute的时候,就和服务端建立连接 dataSource.getConnection().createStatement(); dataSource.getConnection().createStatement() //事务的回滚 dataSource.getConnection().rollback(); //默认的话是自动提交,所有的事务操作框架,都会把autoCommit改成fasle,否则的话无法手动干预 dataSource.getConnection().setAutoCommit(false); //只读事务 dataSource.getConnection().setReadOnly(true); //事务的提交 dataSource.getConnection().commit(); }
DruidDataSource
- implements
ManagedDataSource
- extends
DataSource
- extends
5.1 数据库的操作都会通过事务来管理
ACID,最大的问题,解决的是数据的一致性的问题。(能量守恒)
- 原子性:不可分割
- 一致性
- 隔离性
- 持久性
分布式:分布式事务处理瞬时一致性,最终的一致性(异步核对,主流的方式就通过日志来分析)
事务的操作流程
只要出现了异常,就不会提交。
断电了来不及回滚?
事务是存在内存中的,断电了,这个事务就不存在了,事务就是回去了。
事务只是一种思想,
技术实现方案。
Connection
这个类是 Java 客户端和数据库服务通信的桥梁,也就是一个包装类
就是一个 TCP 连接,底层就是一个 Socket 连接
适配器模式
java 中没有对这个 connect 进行实现。
com.mysql.jdbc.MysqlIO
中 this.mysqlConnection = this.socketFactory.connect(this.host, this.port, props);
connectWithTimeoutMethod = Socket.class.getMethod("connect", socketAddressClass, Integer.TYPE);
客户端通过反射调用了一个 connect
方法,传了一个 IP,一个端口,进行一个封装
他为什么不去实现?
作为一个编程语言,定义一个接口,如果你想用我的语言去连接你的数据库,你必须实现我的接口。我给你一个 jar 包给你,然后不同的数据库引入不同的数据库驱动包,数据库启动包是由数据库厂商提供的。
DataSource 是 Connection 的一个包装类。
DataSourceTransactionManager
DataSourceTransactionManager.doBegin()
开启事务的方法。
它不管是 commit()
还是 rollback()
都是调用的 Connection 的方法。
下
org.springframework.transaction.interceptor.TransactionAspectSupport
事务的基本配置
来源于: https://javaguide.net
微信公众号:不止极客
这篇关于百万架构师第十七课:源码分析:Spring 源码分析:Spring声明式事务操作实现原理|JavaGuide的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-14百万架构师第十六课:源码分析:Spring 源码分析:手写SpringAOP核心原理|JavaGuide
- 2025-01-142024年常用的语言翻译API
- 2025-01-14折腾之王:JavaScript 之父 Brave 浏览器与 BAT 的诞生
- 2025-01-13从协作到创新:电商团队效率提升新方法
- 2025-01-13汉服销售拓展客源,能精准投放广告的软件求推荐!蛇年新春!
- 2025-01-13提升客户体验的关键:电商团队协作效率优化
- 2025-01-13不触碰资金的支付网关有哪些?
- 2025-01-13如何运用敏捷开发的6大模型来提高团队工作效率?
- 2025-01-13汉服制作质量检测,能高清放大细节的软件用哪个?2025 新春!
- 2025-01-13团队目标管理的6种实用方法(附OKR模板)