spring boot中事务的应用

spring声明式事务的实现有两种方式:一是配置xml,二是使用注解,springboot中是使用注解实现事务。
1、在springboot 使用事务:首先使用spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖,这样框架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。在启动类使用注解 @EnableTransactionManagement 开启事务支持后,然后在业务逻辑层的实现类的Service方法上添加注解 @Transactional 便可。
2、@Transactional 注解:来声明一个函数需要被事务管理,Transactional 注解只能应用到 public方法上,如果方法抛出运行时异常或错误,那么会进行事务回滚,如果方法抛出的是非运行时异常,那么不会回滚。
3、运行时异常:是RuntimeException类及其子类异常,就是我们在开发中测试功能时程序终止,控制台出现的异常,比如:
(1) NullPointerException(空指针异常)、
(2) IndexOutOfBoundsException(下标越界异常)
(3) ClassCastException(类转换异常)
(4) ArrayStoreException(数据存储异常,操作数组时类型不一致)
(5) IO操作的BufferOverflowException异常
4、非运行时异常:如果不处理,程序就不能编译通过。如IOException、SQLException等以及自定义的Exception异常。
5、事务的传播机制:在执行一个@Transactinal注解标注的方法时,开启了事务,当该方法还在执行中时,另一个人也触发了该方法,那么此时怎么算事务呢,这时就可以通过事务的传播机制来指定处理方式:
(1) propagation_required:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
(2) propagation_required_new:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
(3) propagation_supports:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
(4) propagation_not_supported:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
(5) propagation_never:以非事务方式运行,如果当前存在事务,则抛出异常。
(6) propagation_mandatory:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
(7) propagation_nested:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则创建一个新的事务。
6、回滚:事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。
(1) 设置回滚点a: savepoint a
(2) 回滚事务到点a:rollback to a

你可能感兴趣的:(spring boot中事务的应用)