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。但它仍然无法运行回滚:(