spring boot + spring data jpa + oracle 事务的使用小结
近期做的项目,框架使用的是spring boot,spring data jpa,数据库使用的是oracle,在开发过程中,操作jpa时遇见了 事务相关的一些问题,经过一番折腾,算是解决了问题,在此记录下来,以备以后查阅。
遇见的问题:
1 事务不回滚,出现异常依旧会对数据库中数据造成影响,(增删改操作时);
2 希望能实现一部分操作数据库的方法事务起作用,一部分不起作用(大致的是业务场景为,先增加一条数据存到数据库中,在执行其他的增删改操作,这些操作如果出现异常回滚,但是先前增加的数据不进行回滚,而是手动删除。);
3 一个类中定义了很多个方法,使用的时候会多个方法之间先后调用使用,但是要求一个方法内部出现问题,其他方法执行的数据库操作也要进行回滚。
问题解决方式:
1 看了很多小伙伴的总结,依次试验,发现不能完全解决问题。
2 查看了事务相关的知识
3 查看了@Transactional注解的使用说明及相关属性
解决方案:
使用声明式事务,即@Transactional时,注意事项
1)不要在类上使用,这样会使该类中所有方法都具有事务。
2)不要在接口上使用事务,否则注解可能失效。
3)事务注解要使用在类的公共方法上才会有效。并且加有事务的方法必须被外部类调用才能生效,即本类中其他方法如果调用了本类里带有事务的方法,那么这个带有事务的方法,其事务会失效。但是调用的方法如果有事务,且为公共方法,并被外部类调用,则事务生效。
4)事务的使用一定要满足公共方法,外部类调用,才可以生效。
5)加事务的方法一定要进行测试,特别是同类多个方法之间的调用一定要注意,要熟悉事务的传播属性等,不同的业务要求使用不同的事务属性。
6) 要注意查询的方法不要加事务,会影响性能。
知识扩充:
数据库事务的四大特性及事务的隔离级别-参考博客:https://www.cnblogs.com/fjdingsd/p/5273008.html
事务的传播属性和机制-参考博客:https://blog.csdn.net/hcmony/article/details/77850183
- Spring Boot 2.0 使用data JPA @Transactional 报错事务不回滚
- 深入学习spring-boot系列(二)--使用spring-data-jpa
- 深入学习spring-boot系列(二)--使用spring-data-jpa
- Spring Boot教程(三十)使用Spring-data-jpa(1)
- 深入学习spring-boot系列(二)--使用spring-data-jpa
- Spring boot学习之spring-data-jpa的使用(一)
- spring boot 配置及使用 spring data jpa
- Spring Boot中使用Spring-data-jpa
- 深入学习spring-boot系列(二)--使用spring-data-jpa
- Spring Boot中使用Spring-data-jpa实现数据库增删查改
- Spring boot学习之spring-data-jpa的使用(二)
- springboot(五):spring data jpa的使用
- Spring Boot中使用Spring-data-jpa
- 在Spring Boot中使用Spring-data-jpa实现分页查询
- 在Spring Boot中使用Spring-data-jpa实现分页查询
- Spring Boot 与 Kotlin使用Spring-data-jpa简化数据访问层
- 深入学习spring-boot系列(二)--使用spring-data-jpa
- 深入学习spring-boot系列(二)--使用spring-data-jpa
- spring boot(五):spring data jpa的使用
- 在Spring Boot中使用Spring-data-jpa实现分页查询