当前位置: 首页 > 知识库问答 >
问题:

当ExceptionMapper映射异常时,Spring事务性不回滚

司空兴为
2023-03-14

我有一个RESTFul服务(由泽西实施)。服务用@Transactional标记。

我声明了一个ExceptionMapper,如下所示:

@Provider
public class ThrowableMapper implements ExceptionMapper<Throwable> {
    private static final Logger log = Logger.getLogger(ThrowableMapper.class);

    public Response toResponse(Throwable ex) {
        log.error("throwable", ex);
        return Response.status(500).entity("Internal Error").type("text/plain").build();
    }
}

未声明exceptionmapper时,事务将回滚。然而,当我有一个ExceptionMapper时,事务是提交而不回滚。

我假设事务未回滚的原因是,当异常被ExceptionMapper捕获时,spring事务代理dosnt检测到异常被抛出,因此事务未回滚。

有没有办法克服这个问题?

共有1个答案

谷泳
2023-03-14

这不是最干净的解决方案,但没有发现其他任何东西。我将此添加到ExceptionMapper:

TransactionAspectSupport.currentTransactionStatus( ).setRollbackOnly();
 类似资料:
  • 这很好,但并不总是在代码中抛出运行时异常。因此,我挖掘并发现如下所示的rollbackFor; 现在,我必须更改所有代码,以使用RollBackfor更改@Transactional。但是还有其他方法可以将所有@transaction advice属性更改为rollbackFor=exception.class吗?

  • 我正在使用Spring JpaRepository在我的一个应用程序屏幕中实现CRUD。作为其中的一部分,我正在开发一个功能,用户可以保存所有汽车实体或没有(应该回滚)到数据库。我不确定如何使用Spring Boot、Spring Rest和Spring JPA实现此功能。 下面是我的源代码。 除此之外,我还得到了一个类似 请帮帮我。谢谢你。

  • 问题内容: 我正在使用Hibernate + spring + 批注来处理我的应用程序中的事务。 事务管理器声明如下: 在大多数情况下,此方法效果很好,但是我发现一个问题,我有2种方法,都标有@Transactional: 和 当我调用OuterTestService#outerMethod()时,出现异常 由于只有一个事务(没有嵌套事务),因此整个事务都标记为“仅回滚”。 我发现可以使用noRo

  • 我使用的是Spring3.0.5和Hibernate3.6。在我的项目中,有一个场景,我必须回滚在抛出的任何异常或错误发生的事务。这是示例代码,除了当我抛出异常时事务不会回滚之外,一切都很好,但是如果抛出任何异常,比如mysql.IntegrityConstraintException,那么事务会回滚,为什么在我的情况下没有发生这种情况? hibernate.cfg 因此,正如我所说,我的问题是,

  • 我在tomcat服务器中使用具有多个数据源配置的JTA原子事务。有时我会遇到以下异常: JTA事务意外回滚(可能是由于超时);嵌套的异常是javax。交易回滚异常:事务被设置为仅回滚 出现这种异常的原因是什么?