@Transactional 回滚在 Spring Boot 中不起作用
@Transactional rollback not working in SpringBoot
我有一个调用两个函数的 @Component
层。
我将我的第二个函数强制为 return 异常,但第一个事务没有回滚。
此服务层用 @Transactional
注释
@Transactional
class {
void updateMessageResult() {
Message updatedMessage = messageService.updateResult(message, messageQueueDto);
messagePublisher.publishEvent(updatedMessage);
}
}
在publishEvent
中强制抛出RuntimeException
public void publishEvent() {
throw new RuntimeException();
}
更新:我尝试了建议,但仍然无法回滚
您是否在您的项目中启用了事务管理?
例如,使用 @EnableTransactionManagement
注释您的配置 class
还有一件事:默认情况下,@Transactional 的事务回滚仅适用于 RuntimeException(或其子class)。确保你抛出的异常是 RuntimeException
在您想要事务的方法级别使用@Transactional 注释。它应该有效。
很抱歉张贴了错误的代码。我只是输入代码而不是复制粘贴它。
答案是我忘记为方法添加访问器(或public)。
如果不指定Java中方法的访问器,则默认访问器为default。
谢谢!
我有一个调用两个函数的 @Component
层。
我将我的第二个函数强制为 return 异常,但第一个事务没有回滚。
此服务层用 @Transactional
@Transactional
class {
void updateMessageResult() {
Message updatedMessage = messageService.updateResult(message, messageQueueDto);
messagePublisher.publishEvent(updatedMessage);
}
}
在publishEvent
中强制抛出RuntimeException
public void publishEvent() {
throw new RuntimeException();
}
更新:我尝试了建议,但仍然无法回滚
您是否在您的项目中启用了事务管理?
例如,使用 @EnableTransactionManagement
注释您的配置 class还有一件事:默认情况下,@Transactional 的事务回滚仅适用于 RuntimeException(或其子class)。确保你抛出的异常是 RuntimeException
在您想要事务的方法级别使用@Transactional 注释。它应该有效。
很抱歉张贴了错误的代码。我只是输入代码而不是复制粘贴它。
答案是我忘记为方法添加访问器(或public)。
如果不指定Java中方法的访问器,则默认访问器为default。
谢谢!