百万架构师第十七课:源码分析: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

5.1 数据库的操作都会通过事务来管理

ACID,最大的问题,解决的是数据的一致性的问题。(能量守恒)

  • 原子性:不可分割
  • 一致性
  • 隔离性
  • 持久性

分布式:分布式事务处理瞬时一致性,最终的一致性(异步核对,主流的方式就通过日志来分析)

事务的操作流程

事务操作流程

只要出现了异常,就不会提交。

断电了来不及回滚?

事务是存在内存中的,断电了,这个事务就不存在了,事务就是回去了。

事务只是一种思想,

技术实现方案。

Connection

这个类是 Java 客户端和数据库服务通信的桥梁,也就是一个包装类

就是一个 TCP 连接,底层就是一个 Socket 连接

Connection

适配器模式

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 包给你,然后不同的数据库引入不同的数据库驱动包,数据库启动包是由数据库厂商提供的。

Connection不同的实现

DataSource 是 Connection 的一个包装类。

connection-DataSource

DataSourceTransactionManager

DataSourceTransactionManager.doBegin() 开启事务的方法。

它不管是 commit() 还是 rollback() 都是调用的 Connection 的方法。

org.springframework.transaction.interceptor.TransactionAspectSupport

事务的基本配置

来源于: https://javaguide.net

微信公众号:不止极客



这篇关于百万架构师第十七课:源码分析:Spring 源码分析:Spring声明式事务操作实现原理|JavaGuide的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程