Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring事务在RuntimeException上回滚_Java_Spring_Spring Boot_Spring Transactions - Fatal编程技术网

Java Spring事务在RuntimeException上回滚

Java Spring事务在RuntimeException上回滚,java,spring,spring-boot,spring-transactions,Java,Spring,Spring Boot,Spring Transactions,我有一个事务方法,我想调用另一个可能引发RuntimeException的方法 问题在于,只有在抛出异常时,事务才会标记为回滚 另一个方法调用本身在try-catch块中,但我认为当另一个方法通过抛出异常返回时,事务会被标记 示例: MyService.java MyUtils.java 编辑: 我不认为这是的重复,因为异常最终被捕获。 问题可能与此类似,因为它还涉及事务和回滚 注释@Transactional具有参数,例如rollback和no rollback for,您可以使用这些参数判断

我有一个事务方法,我想调用另一个可能引发RuntimeException的方法

问题在于,只有在抛出异常时,事务才会标记为回滚

另一个方法调用本身在try-catch块中,但我认为当另一个方法通过抛出异常返回时,事务会被标记

示例:

MyService.java

MyUtils.java

编辑:

我不认为这是的重复,因为异常最终被捕获。

问题可能与此类似,因为它还涉及事务和回滚

注释
@Transactional
具有参数,例如
rollback
no rollback for
,您可以使用这些参数判断哪些异常将导致或不会导致回滚。例如,您可以编写:

@Transactional(rollbackFor = {RuntimeException.class})
这将在
运行时异常时导致回滚。但是,我认为默认情况下,
RuntimeException
会导致回滚。因此,您可能必须在
no rollback for
子句中指定此异常。
有关详细信息,请参阅并查找“16.5.5设置””段落

Spring事务不取决于行流,它取决于类似的方法如果当前方法中有任何异常,它将回滚必须在
try
-
catch
块之外发生某些事情。在最后放一个log语句…看看它是否被记录下来-同时你会看到回滚。同意,有些东西闻起来不对劲。该代码应该按您的要求工作。@ChristianMüller不,
RuntimeException
也会被
try catch
捕获。@Markrottveel我不认为这是标记问题的重复,请参阅我的编辑。为方法上的
@Transactional
注释设置
norollboor
值将意味着它永远不会在
运行时异常上回滚。我想做的是只回滚真正未捕获的
RuntimeException
。如果您在标记为@Transactional的方法中捕获了异常,那么该异常不应该影响您的事务行为。在你的方法中一定有其他你没有发现的异常
@Component
public class MyUtils {

    // Does not use transactions, repositories
    // But I think it inherits the transaction and marks it as rollbackOnly
    public void otherPublicMethod() {

        // Maybe this is seen as an uncaught exception
        throw new RuntimeException();
    }
}
@Transactional(rollbackFor = {RuntimeException.class})