微服务项目实战笔记5

Spring boot事务管理

事务有四大特性:ACID:原子性(Atomicity)一致性(consistency)隔离性(isolation)持久性(Durability).
spring既支持编程式事务管理(也称编码事务管理),又支持声明式事务管理。
编程式事务管理是指事务管理代码嵌入业务方法中来控制事务的提交和回滚。在编码式事务中,必须在每个业务操作中包含额外的事务管理代码。
声明式事务是指将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。

spring声明式事务
spring配置文件中关于事务配置总是有三部分组成,分别是Datasource、TransactionManager和代理机制。无论哪种配置方式,一般变化的只是代理机制部分,Datasource、TransactionManager这两部分只回根据数据访问方式有所变化,比如使用Hibernate进行数据访问时。DataSource实现为SessionFactory,TransactionManager的实现为HibernateTransactionManager.
spring声明式事务配置提供5种方式,而基于Annotation的注解方式目前比较流行。
@Transation注解在类或者方法中表明该类或者方法需要支持事务支持,被注解的类或者方法被调用的时候,Spring开启一个新的事务,当方法正常运行时,spring会提交事务。spring提供了@EnableTrasactionManagement注解在配置类上开启声明式事务的支持。使用@EnableTransactionManagement后,spring容器会自动扫描注解@Transactional的方法和类。

spring注解事务行为
当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。传播行为可以在 @Transation注解的属性中指定,Spring定义了7种传播方式。
spring传播行为:
PROAGATION_REQUIRED : 如果当前没有事务,就新建一个事务,如果已经存在一个事物,就加入到这个事务中。
PROPAGATION_SUPPORTS : 支持当前事务,如果没有当前事务。就以非事务方式执行。
PROPAGATION_MANDATORY : 使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW : 新建事务,如果当前存在事务,就把当前事务挂起
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,就抛出异常。
PROPAGATION_NESTED:如果当前存在事务,就嵌套在事务内执行:如果当前没有事务,就执行与PROPAGATION_REQUIRED类似的操作。

并发事务导致的问题可以分为一下三类:
脏读
不可重复读
幻读

你可能感兴趣的:(java)