Spring声明式事务

Spring声明式事务

使用方式

事务是对于多个SQL执行才有必要,一个就算了。推荐使用第三种@Transactional,毕竟事务声明是很严谨重要的点。这个可读性等更好。

注解声明配置方式

spring-service.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="xyz.cglzwz.service"/>

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource">
    </bean>

    <!-- 基于注解的声明式事务 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

Spring声明事务回滚

Spring声明事务回滚的默认情况是 抛出运行期异常

事务的嵌套传播

多个事务嵌套,当内/外回滚提交都出现的时候,不同情况有不同结果。现在暂时没打理。这个也和事务隔离级别有关,MySQL默认是可重复读。
一个博主的分享
这里内层事务一旦start transaction就强制前面的外层事务提交了。

事务隔离级别

简书一个博客待验证。


  转载请注明: Chgl16 Spring声明式事务

 上一篇
Redis后端缓存量大的数据库查询 Redis后端缓存量大的数据库查询
需求在秒杀系统中,红色部分是可以优化的,对于地址暴露接口那块,也就是用户根据id客户端访问查看页面是否可以秒杀了,如果可以秒杀,会暴露一个动态hash接口。所有也是刷新很频繁的。 public Exposer exportSeckill
2019-07-18
下一篇 
MySQL表锁行锁 MySQL表锁行锁
对比MySQL Innodb支持行锁,而MyISAM只支持表锁。这两种主要是粒度的差别。锁是事务的关键保证。 表锁:开销小实现简单,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低 行锁:开销大实现复杂,加锁慢;会出现死锁;
2019-07-13
  目录