Spring有哪几种事务传播行为?
面试事务传播行为propagation behavior指的就是当一个事务方法被另一个事务方法调用时这个事务方法应该如何进行。例如Service A里面的一个事务方法调用Service B里面的一个事务方法正常来说有几种解决方案融入事务直接去掉serviceB中关于开启事务和提交事务的begin和commit融入到serviceA的事务中直接用ServiceA的事务。问题B事务的错误会引起A事务的回滚。挂起事务如果不想B事务的错误引起A事务的回滚可以开启两个连接一个执行A一个执行B互不影响执行到B的时候把A挂起新起连接去执行BB执行完了再唤醒A执行。嵌套事务MySQL中可以通过给B事务加savepoint和rollback去模拟嵌套事务把B设置成伪事务。spring中的事务传播行为PROPAGATION_REQUIRED需要需要什么需要事务。如果存在一个事务则直接使用当前事务。如果没有事务则开启一个新的事务。A如果存在事务则B融入A事务如果没有则新起一个事务PROPAGATION_SUPPORTS支持支持什么么支持A的事务。如果存在一个事务支持当前事务。如果没有事务则非事务的执行。A有则B融入A没有则非事务执行PROPAGATION_MANDATORY强制性强制什么强制必须有事务。如果已经当前存在一个事务使用当前事务。如果没有一个活动的事务则抛出异常。A有则B融入A没有则抛异常PROPAGATION_REQUIRES_NEW需要新的如果一个事务已经存在则先将这个存在的事务挂起。如果没有则新起一个事务执行。A有则将A事务挂起新开一个事务来执行B执行完后唤醒A继续执行A没有事务则新起一个事务执行BPROPAGATION_NOT_SUPPORTED不支持不支持什么不支持事务。总是非事务地执行并挂起任何存在的事务。A有则挂起AB非事务执行执行完之后唤醒AA继续执行A还是以事务形式执行的PROPAGATION_NEVER从不总是非事务地执行如果存在一个活动事务则抛出异常。A有则抛异常PROPAGATION_NESTED嵌套的如果一个活动的事务存在则运行在一个嵌套的事务中。如果没有活动事务则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。A有则B用savapoint方式嵌套执行与A