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)
相关推荐
江南十四行2 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
IT_陈寒3 小时前
Redis缓存击穿把我坑惨了,原来这样设过期时间才靠谱
前端·人工智能·后端
妙码生花3 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十二):管理员权限检查中间件,AI 随意放行预闯大祸
前端·后端·go
创安电气研究所3 小时前
用 Node.js 将变频器运行数据接入 MQTT
后端
董员外3 小时前
RAG 系统进化论(八):Agentic RAG(智能体式 RAG),从回答问题到完成任务
人工智能·后端·设计模式
大勇前进4 小时前
告别 div 满天飞,HTML5 语义化标签真的有必要用吗?
后端
小满zs4 小时前
Go语言第六章(结构体)
后端·go
属于自己的天空4 小时前
每天省去重复 Prompt:我用 Skills 把 CRUD 生成标准化了
前端·后端
卡卡罗特AI4 小时前
GitHub怎么用?零基础,保姆级使用教程-上!建议收藏
前端·后端·github