声明式事务

一、环境搭建

  • 1)导入相关依赖
    数据源、数据库驱动、spring-jdbc模块
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java 数据源 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.44</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 数据库驱动 -->
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc spring-jdbc模块 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.12.RELEASE</version>
    </dependency>
  • 2)配置数据源、JdbcTemplate(Spring提供的简化数据库操作的工具)操作数据
  • 3)给方法上标注 @Transactional 表示当前方法是一个事务方法;
  • 4) @EnableTransactionManagement 开启基于注解的事务管理功能;
    @EnableXXX
  • 5)配置事务管理器来控制事务【重要的一步】
    @Bean
    public PlatformTransactionManager transactionManager() throws Exception{
        return new DataSourceTransactionManager(dataSource());
    }

二、原理

  • 1) @EnableTransactionManagement
    利用 TransactionManagementConfigurationSelector 给容器中会导入组件
    导入两个组件:AutoProxyRegistrar、ProxyTransactionManagementConfiguration

  • 2) AutoProxyRegistrar 给容器中注册一个 InfrastructureAdvisorAutoProxyCreator 组件;后置处理器
    InfrastructureAdvisorAutoProxyCreator ?
    利用后置处理器机制在对象创建之后,包装对象,返回一个代理对象(增强器),代理对象执行方法利用拦截器链进行调用;

  • 3) ProxyTransactionManagementConfiguration 做了什么?
    给容器中注册事务增强器;
    1.事务增强器要用事务注解的信息, AnnotationTransactionAttributeSource 解析事务注解
    2.事务拦截器:
    TransactionInterceptor 保存了事务属性信息,事务管理器;
    它是一个 MethodInterceptor 方法拦截器;
    在目标方法执行的时候;
    执行拦截器链;
    事务拦截器:
    2.1.先获取事务相关的属性;TransactionAttribute
    2.2.再获取 PlatformTransactionManager ;如果事先没有添加指定任何transactionManager,
    最终会从容器中按照类型获取一个PlatformTransactionManager
    2.3.执行目标方法
    如果异常,获取到事务管理器,利用事务管理器回滚操作;
    如果正常,利用事务管理器,提交事务;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容