在我的应用程序中,我对不同的方法有几个@Transactional
注释。多个Spring @Transactional注释在一个应用程序中?
他们使用Crud Repository
在我的数据库上执行删除操作。我想知道在什么阶段做这些删除得到执行,我需要所有@Transactional
注释?
例如,2删除methods
被后来被称为在façade method
,外墙方法,然后调用在runner
:
1.方法1:
@Transactional
public void deleteFromSchemaOne(){
}
1.方法2:
@Transactional
public void deleteFromSchemaTwo(){
}
2.调用这2种方法在外观方法:
@Transacational
public void deleteFromAllSchemas(){
deleteFromSchemaOne();
deleteFromSchemaTwo();
}
3.调用外墙方法亚军
@Transactional
public void run(String... args) throws Exception {
service.deleteFromAllSchemas();
}
我想知道的是:
我删除的阶段实际上是执行?该方法是否在Runner内完成?
编辑:
外墙方法与循环:
public void deleteFromAllSchemas() {
for(int i = 0; i < list.size(); i++){
deleteFromSchemaOne();
deleteFromSchemaTwo();
}
}
基本上线的东西我想要做的就是确保在deleteFromAllSchemas()方法是在架构一个和两个务必transactional-即一切被删除或什么也没有,我该怎么做?谢谢你的帮助。 – java123999
这是用你的'deleteFromAllSchemas()'中的'@ Transactional'完成的。如果发生错误,它将回滚在'deleteFromSchemaOne()'和'deleteFromSchemaTwo()'中完成的所有更改。你也应该真正阅读交易。他们不是你希望得到正确的或“在工作中学习”的东西。 – Kayaman
这是正确的。我想补充一点,一般来说,交易应尽可能短。因此,除非这些数据库删除彼此依赖(假设一个失败,您将希望回滚整个事务),那么您应该只注释两个删除方法。这可以确保每次删除都将在单独的事务中运行。如果他们确实相互依赖。使用'@Transactional(propagation = Propagation.MANDATORY)'注释调用它们的方法并选择注释删除方法' –