我试图了解一个涉及spring的声明式事务性注释的项目。该函数的主体不进行任何JDBC调用或调用JPA存储库方法。它所做的只是调用一些第三方API并转换其结果,甚至没有将响应保存在数据库中。因此根本没有数据库交互。
我的问题是,在此方法上使用@Transactional注释是否值得?因为根据我的理解,@ Transactional仅有助于维护数据库的一致性。
答案 0 :(得分:7)
@Transactional
注释定义了单个数据库事务的范围-它所做的只是开始事务并提交或回滚。它允许管理事务声明方式,而不是每次都以编程方式进行。
它看起来像这样:
UserTransaction utx = entityManager.getTransaction();
try {
utx.begin();
// your method invocation here
utx.commit();
} catch(RuntimeException ex) {
utx.rollback();
throw ex;
}
在没有数据库调用的情况下,通过建立方法@Transactional
只会使它的性能变差,因为在不必要时必须执行多余的步骤。