传播设置是必需的。
@Transactional(propagation = Propagation.REQUIRED)
事务是读/写的。
它们在什么场景下使用?请举例说明
最佳答案
Spring事务默认为
@Transactional(propagation = Propagation.REQUIRED)
因此您不需要指定传播属性。
那么,Spring 组件的 @Transactional
注释意味着什么?
Spring框架将启动一个新事务并执行所有方法,最后提交事务。
但是如果
应用程序上下文
中不存在事务,那么 Spring 容器将启动一个新事务。- 如果将多个方法配置为
Propagation.REQUIRED
,则事务行为会以嵌套方式在逻辑上分配给每个方法,但它们都在同一物理事务下。
那么,结果是什么?
结果是,如果任何嵌套事务失败,则整个事务将失败并回滚(不要在数据库中插入任何值)而不是提交。
示例:
@Service
public class ServiceA{
@Transactional(propagation = Propagation.REQUIRED)
public void foo(){
fooB();
}
@Transactional(propagation = Propagation.REQUIRED)
public void fooB(){
//some operation
}
}
说明:
在此示例中,foo()
方法分配了事务行为,并且在 foo()
内部调用了另一个方法 fooB()
,该方法也是事务性的。
这里,fooB()
充当 foo()
方面的嵌套事务。如果 fooB()
由于任何原因失败,则 foo()
也无法提交。相反,它会回滚。
关于Spring管理事务@Transactional注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46786651/