Spring事务简介【重点】

Spring提供的事务管理是数据层的事务还是业务层的事务?

  1. 事务管理器要根据实现技术进行选择
  2. MyBatis框架使用的是JDBC事务
【第一步】在业务层接口上添加Spring事务管理
java 复制代码
public interface AccountService {
    //配置当前接口方法具有事务
    @Transactional
    public void transfer(String out,String in ,Double money) ;
}

注意事项

  1. Spring 注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合
  2. 注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务
【第二步】设置事务管理器(将事务管理器添加到IOC容器中)

说明:可以在JdbcConfig中配置事务管理器

注意事项

  1. 事务管理器要根据实现技术进行选择
  2. MyBatis框架使用的是JDBC事务
【第三步】开启注解式事务驱动
java 复制代码
@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
//开启注解式事务驱动
@EnableTransactionManagement
public class SpringConfig {
}
【第四步】运行测试类,查看结果
java 复制代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class AccountServiceTest {

    @Autowired
    private AccountService accountService;

    @Test
    public void testTransfer() throws IOException {
        accountService.transfer("Tom","Jerry",100D);
    }
}

说明:对于RuntimeException类型异常或者Error错误,Spring事务能够进行回滚操作。但是对于编译器异常,Spring事务是不进行回滚的,所以需要使用rollbackFor来设置要回滚的异常。

案例:转账业务追加日志

需求和分析
  • 需求:实现任意两个账户间转账操作,并对每次转账操作(无论是否成功)在数据库进行留痕
  • 需求微缩:A账户减钱,B账户加钱,数据库记录日志
  • 分析: ①:基于转账操作案例添加日志模块,实现数据库中记录日志 ②:业务层转账操作(transfer),调用减钱、加钱与记录日志功能
  • 实现效果预期: 无论转账操作是否成功,均进行转账操作的日志留痕
  • 存在的问题: 日志的记录与转账操作隶属同一个事务,同成功同失败
  • 实现效果预期改进: 无论转账操作是否成功,日志必须保留
  • 事务传播行为:事务协调员对事务管理员所携带事务的处理态度

事务传播行为

java 复制代码
默认是
@Transactional(propagation = Propagation.REQUIDED)
//新的设备协调员
@Transactional(propagation = Propagation.REQUIRES_NEW)
相关推荐
掘金者阿豪几秒前
HashMap 一篇讲透:从数组、链表、红黑树到扩容以及退化,面试再也不怕被追问
后端
用户813267933253 分钟前
Python 计算盘中 VWAP:为什么 1 分钟 K 线是量化工程中的高性价比选择
后端·算法·github
风曳丷5 分钟前
07|Instruction Hierarchy 不是安全边界
后端
灯澜忆梦5 分钟前
【基于GO的Web开发11】gin获取URL‑Path 路径参数
前端·后端·golang·html·gin
掘金者阿豪6 分钟前
密码不想继续交给浏览器保存?群晖部署 Vaultwarden,搭建自己的密码库
后端
高频因子挖掘机7 分钟前
Python批量获取1000只ETF 5分钟K线:从分页到吞吐量优化的QuantDash实践
后端·算法·github
Rain的Java大神之路7 分钟前
SkyWalking从0-1部署成功实战
java·后端·架构
就叫飞六吧8 分钟前
Spring 动态注册与移除 Bean 科普
java·后端·spring
用户8181870627469 分钟前
第11章 一次线上Full GC频繁的完整排查记录:从监控告警到根因定位
后端