• Spring 事务


    Spring 事务简介

    • 事务作用:在数据层保障一系列的数据库操作同成功同失败
    • Spring 事务作用:在数据层或业务层保证一系列的数据库操作同成功同失败
    public interface PlatformTransactionManager {
    	void commit(TransactionStatus status) throws TransactionException;
    	void rollback(TransactionStatus status) throws TransactionException;
    }
    
    • 1
    • 2
    • 3
    • 4
    public class DataSourceTransactionManager {
    	...
    }
    
    • 1
    • 2
    • 3

    步骤:

    1. 在业务层接口上添加 Spring 事务管理
    public interface AccountService {
    	@Trabsactional
    	public void transfer(String out, String in, Double money);
    }
    
    • 1
    • 2
    • 3
    • 4

    注意: Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合;
    注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务。

    1. 设置事务管理器
        //配置事务管理器,mybatis使用的是jdbc事务
        @Bean
        public PlatformTransactionManager transactionManager(DataSource dataSource){
            DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
            transactionManager.setDataSource(dataSource);
            return transactionManager;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    PlatformTransactionManager : Spring 提供的标准接口

    DataSourceTransactionManager : Spring 提供的实现类,用的是jdbc事务

    如果要换,接口不能动,换实现类。

    记得要注入 dataSource

    注意: 事务管理器要根据实现技术进行选择,mybatis框架使用的是jdbc事务

    1. 开启注解式事务驱动 : @EnableTransactionManagement
    @Configuration
    @ComponentScan("com.itheima")
    @PropertySource("classpath:jdbc.priperties")
    @Import({JdbcConfig.class,MybatisConfig.class})
    @EnableTransactionManagement
    public class SpringConfig{
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Spring 事务角色

    • 事务管理员: 发起事务方,在Spring中通常指代业务层开启事务的方法
    • 事务协调员: 加入事务方,在Spring中通常值代数据层方法,也可以是业务层方法

    Spring 事务属性

    在这里插入图片描述

    事务传播行为

    • 事务传播行为: 事务协调员对事务管理员所携带事务的处理态度
      在这里插入图片描述
      在这里插入图片描述在这里插入图片描述

    @Transactional(propagation = Propagation.REQUIRES_NEW)

    public interface LogService {
        //propagation设置事务属性:传播行为设置为当前操作需要新事务
        @Transactional(propagation = Propagation.REQUIRES_NEW)
        void log(String out, String in, Double money);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

  • 相关阅读:
    K8s进阶之路-Pod的生命周期
    MacOS国产单片机正版Jlink调试配置和eclipse开发配置
    深入了解Java 8 新特性:lambda表达式进阶
    Qt 布局(QSplitter 类&QDockWidget 类) 总结
    Linux运维基础知识大全
    通过3dmax将max文件导出为unity3d可用的带贴图的fbx文件
    Starlink全系卫星详细介绍,波段频谱、激光星间链路技术、数据传输速率等等
    MongoDB 基础了解(三)
    opencv-python库的安装【一文读懂】
    基于apache paimon实时数仓全增量一体实时入湖
  • 原文地址:https://blog.csdn.net/SUburbuia/article/details/136284089