我有一个主要的 DB 处理程序方法,它调用其他方法,这些方法也与 BD 事物一起工作。
我为 main 方法添加了 @Transactional 注释,因为如果出现问题,我想回滚所有内容。
我的问题是:我是否也应该为子方法加上这个注解,否则它会知道子方法是从事务性方法调用的。
比如删除方法中出现异常,如何保证写入部分也回滚:
@Transactional
public void maintDbTings() {
writing();
deleting();
}
@Transactional //do I need this?
public void writing() {
//no exceptions
}
@Transactional //do I need this?
public void deleting() {
//exception occurs
}
最佳答案
Spring 在遇到用 @Transactional
注释的方法时开始事务。交易范围
涵盖该方法的执行,该方法调用的任何方法的执行,以及
依此类推,直到方法返回。配置的涵盖的任何托管资源
PlatformTransactionManager 和您在交易范围内使用的参与
交易。例如,如果您使用 org.springframework.jdbc.datasource.DataSourceTransactionManager
,则从链接的 DataSource
检索连接
自动参与交易。
事务以两种方式之一终止:要么方法直接完成执行,事务管理器提交事务,要么方法抛出异常,事务管理器回滚事务。
我希望现在一切都清楚了。
关于java - 我是否也应该在 spring 中为子方法添加 @Transactional 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42644669/