java - 我是否也应该在 spring 中为子方法添加 @Transactional 注释?

标签 java spring transactions rollback transactional

我有一个主要的 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/

相关文章:

java - 如何更好地设计这段代码的类结构

java - 如何为 Resttemplate postForObject 方法编写 mockito junit

java - 使用 Hibernate 将嵌套的 JSON 数据保存到 MySQL 数据库中

java - 在 Java-EE 中透明地管理每个请求事务

database - Postgres : How to clear transaction ID for anonymity and data reduction

mysql - 为什么 "select_for_update()"不能在 Django 和 MySQL 中一起工作?

java - 入门NLP——Python+大数据集

java - 在两个不同模式中使用两个同名表时避免 Hibernate Annotation Exception

java - 使用 Spring Data Elasticsearch 在 'scan & scroll' 查询期间出现 Elasticsearch SearchContextMissingException

spring - 多个 Spring @Scheduled 任务同时进行