您的位置:首页 > 数据库 > Oracle

spring boot + spring data jpa + oracle 事务的使用小结

2018-06-06 13:22 459 查看

近期做的项目,框架使用的是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

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: