在不与数据库对话的方法中使用 Spring 的 @Transactional 注释是否有意义?

Abd*_*tah 0 spring spring-aop spring-transactions spring-boot

我试图了解一个涉及 spring 声明性事务注释的项目。该函数的主体没有进行任何 JDBC 调用或调用 JPA 存储库方法。它所做的只是调用一些第三方 API 并转换它的结果,它甚至没有将响应保存在数据库中。所以根本没有数据库交互。

我的问题是是否值得在此方法上使用 @Transactional 注释?因为根据我的理解,@Transactional 仅有助于保持数据库的一致性。

Pio*_*aza 8

@Transactional注解定义单个数据库事务的范围-它是所有它开始事务,要么提交它或回滚。它允许以声明方式管理事务,而不是每次都以编程方式进行。

它看起来像这样:

UserTransaction utx = entityManager.getTransaction(); 

try { 
    utx.begin(); 
    // your method invocation here
    utx.commit(); 
} catch(RuntimeException ex) { 
    utx.rollback(); 
    throw ex; 
}
Run Code Online (Sandbox Code Playgroud)

通过@Transactional在没有数据库调用时创建方法,您只会使其性能变差,因为在不必要时必须执行冗余步骤。