Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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 @事务回滚在SpringBoot中不起作用_Java_Spring Boot_Spring Transactions - Fatal编程技术网

Java @事务回滚在SpringBoot中不起作用

Java @事务回滚在SpringBoot中不起作用,java,spring-boot,spring-transactions,Java,Spring Boot,Spring Transactions,我有一个@组件层,它调用两个函数。 我强制第二个函数返回一个异常,但第一个事务没有回滚。 此服务层用@Transactional @Transactional class { void updateMessageResult() { Message updatedMessage = messageService.updateResult(message, messageQueueDto); messagePublisher.publishEvent(updatedMessage

我有一个
@组件
层,它调用两个函数。 我强制第二个函数返回一个异常,但第一个事务没有回滚。 此服务层用
@Transactional

@Transactional
class {

void updateMessageResult() {
    Message updatedMessage = messageService.updateResult(message, messageQueueDto);
    messagePublisher.publishEvent(updatedMessage);
 }
}
publishEvent
中,它强制抛出RuntimeException

public void publishEvent()  {
throw new RuntimeException();
}

更新:我尝试了这些建议,但仍然无法回滚

您是否在项目中启用了事务管理

例如,使用@EnableTransactionManagement


还有一件事:默认情况下,使用@Transactional的事务回滚仅适用于RuntimeException(或其子类)。确保抛出的异常是RuntimeException,在需要事务的方法级别使用@Transactional注释。它应该能用。

很抱歉发布了错误的代码。我只是键入代码而不是复制粘贴

public void publishEvent()  {
throw new RuntimeException();
}
答案是我忘记为该方法添加访问器(或public)

如果不在Java中指定方法的访问器,则默认的访问器将是default


谢谢大家!

没有指示您在何处/如何设置事务管理。您正在显示的任何代码本身都不会导致任何回滚。@ChristianFrommeyer但默认情况下,
@EnableTransactionManagement
处于启用状态:(@mengmeng但默认情况下,它只适用于即时DB操作,而不适用于更高级别的方法,除非您使用
@Transactional
注释该方法。您的问题中没有此类注释。@ChristianFrommeyer我想在我的标题中已经理解该类具有
@Transactional
注释好的,我会的edit@mengmeng我最近没有处理支持事务的队列的经验。您确定您的队列的事务管理也是自动的吗?假设
messageService
不是与DB对话,而是与队列对话。您好。我尝试过启用它。并抛出RunTimeException而不是IllegalAccessException。但它仍然无法运行回滚:(