19 | Spring 事务常见错误(上)
傅健
你好,我是傅健。
通过上节课的学习,我们了解了 Spring Data 操作数据库的一些常见问题。这节课我们聊一聊数据库操作中的一个非常重要的话题——事务管理。
Spring 事务管理包含两种配置方式,第一种是使用 XML 进行模糊匹配,绑定事务管理;第二种是使用注解,这种方式可以对每个需要进行事务处理的方法进行单独配置,你只需要添加上 @Transactional,然后在注解内添加属性配置即可。在我们的错误案例示范中,我们统一使用更为方便的注解式方式。
另外,补充一点,Spring 在初始化时,会通过扫描拦截对事务的方法进行增强。如果目标方法存在事务,Spring 就会创建一个 Bean 对应的代理(Proxy)对象,并进行相关的事务处理操作。
在正式开始讲解事务之前,我们需要搭建一个简单的 Spring 数据库的环境。这里我选择了当下最为流行的 MySQL + Mybatis 作为数据库操作的基本环境。为了正常使用,我们还需要引入一些配置文件和类,简单列举一下。
数据库配置文件 jdbc.properties,配置了数据连接信息。
JDBC 的配置类,从上述 jdbc.properties 加载相关配置项,并创建 JdbcTemplate、DataSource、TransactionManager 相关的 Bean 等。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Spring事务管理中常见的错误案例和解决方法进行了详细介绍。文章首先通过具体案例展示了在使用@Transactional注解时可能出现的问题,指出了Spring在处理事务过程中对异常的回滚规则。随后,针对两个具体案例进行了分析和解决方法的讲解,包括修改异常类型和调整方法修饰符等。通过对Spring源码的解析,深入浅出地介绍了Spring事务管理中的常见错误,并提出了解决方法。总结强调了Spring声明式事务机制的特点,以及对private方法、异常回滚规则的处理方式,为读者提供了清晰的技术指导和思考题,帮助读者更好地理解和应用Spring事务管理。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring 编程常见错误 50 例》,新⼈⾸单¥59
《Spring 编程常见错误 50 例》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(11)
- 最新
- 精选
- 辰砂@Transactional(rollbackFor = Exception.class, noRollbackFor = RuntimeException.class)2021-06-0428
- 陈汤姆学到了,一直以为注解只能对public生效是因为动态代理的原因!2021-06-1542
- LkS可以使用noRollbackFor @Transactional(rollbackFor = Exception.class,noRollbackFor = RuntimeException.class)2021-06-042
- study的程序员事务层面默认 publicMethodsOnly=true,所以private或者protected都不生效 强行设置 publicMethodsOnly=false: @Bean @Primary @Role(BeanDefinition.ROLE_INFRASTRUCTURE) public TransactionAttributeSource mytransactionAttributeSource() { return new AnnotationTransactionAttributeSource(false); } 之后protected生效,private不生效,aop不能代理private方法/final方法,所以不调用target的方法,所以spring注入的对象为null,所以会报NPE,studentMapper为空2022-11-18归属地:上海1
- 安迪密恩我觉得可以把注解加在 saveStudent 这个方法上,要更自然一些。2022-03-111
- qchang思考题:一种是try-catch判断异常类型后,非RuntimeException抛出;另一种可以采用注解@Transactional(noRollbackFor = RuntimeException.class)2021-06-041
- 小林桑1.Spring事务默认只有runtimeexception和error才会回滚;但是可以通过transactional注解指定回滚的异常类型。 2.对私有方法加transactional注解事务不会回滚。2024-01-19归属地:四川
- 番茄讲的非常清晰2023-04-24归属地:北京
- 雨落~紫竹其实就分2类 一类配置问题 一类代理问题2022-06-22
- Monday案例2中,进入doSaveStudent()方法后,抛NPE(studentMapper==null 为true)2021-07-19
收起评论