Spring —— tx

1. Spring —— tx 声明式事务的框架

对AOP的再次封装,无需编写增强类,只需编写配置文件,声明事务即可

由程序员编写配置文件即可(注解,xml),指定哪些方法需要添加事务和事物的属性即可

概括:存放了事务具体的实现代码 - > 把它交给 - > spring-tx - > 根据它的实现进行事物操作。

2.事务装配

todo:在配置类中设置
    1.需要装配事务管理实现对象(插拔式)
    2.开启事务:@EnableTransactionManagement // 开启事务注解的支持
     
    //装配事务管理实现对象
    @Bean  //事务方法声明
    public TransactionManager transactionManager(DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

3.事务方法声明:@Transactional

​ 添加事务:@Transactional
​ 位置:方法 | 类上
​ 方法:当前方法有事务
​ 类上:类下所有的方法有事务
​ 注:以方法为准,方法上的属性设置会覆盖类上的属性设置,注意默认属性

4.事务属性


todo:1.事务属性:只读模式
        事务的只读模式默认 false,即非只读模式
        但**对不做修改的代码**,如查询代码,
        局部可以修改为只读模式覆盖非只读模式
        只读模式可以提高查询事务的效率
        @Transactional(readOnly = true)
     2.事务属性:超时时间
        默认:永远不超时 -1
        设置:timeout = 时间 秒数   @Transactional(readOnly = true ,timeout = 3)
        超过时间,就会回滚事务和释放异常 TransactionTimedOutException: Transaction timed out
     3.事务属性:事务异常
        默认:指定发生运行时异常,事务才会回滚(发生异常,恢复到上一步)
        指定异常回滚:指定Exception异常来控制所有事务都回滚
            最好开始就指定:@Transactional(rollbackFor = Exception.class)捕获异常范围
        指定异常不回滚:控制某个异常不发生回滚,在回滚异常范围内
            一般不设置:@Transactional(rollbackFor = Exception.class,noRollbackFor = FileNotFoundException.class)
            发生FileNotFoundException异常时不回滚事务
     4.事务属性:事务隔离级别
        概念:多个事务并发时,DBS为保证数据一致性所遵守的规定
        常见隔离级别(低——>高):读未提交、读已提交、可重复读、串行化
        推荐设置:读已提交(性能最好) @Transactional(@isolation)
     5.事务属性:事务传播行为
        概念:多个事务之间在传播调用时,各事务之间的影响程度,子事务是否加到了父事务
            事务传播行为的属性设置到子事务方法上
        对两个类而言才生效,同一个类中不生效,因为两个类,才会生成代理对象
        5.1 @Transactional(propagation = Propagation.REQUIRED)
            该属性值是默认值,推荐使用
            5.1.1 如果父方法有事务,就加入到父方法的事务中,最终是同一个事务,
            当一个子事务异常时,父事务中的其他子事务都回滚
            5.1.2 如果父方法没有事务,就新建为独立事务,无传播性
        5.2 @Transactional(propagation = Propagation.REQUIRES_NEW)
            声明此子事务是独立事务,无传播性,不管父方法是否有事务
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值