【问题标题】:Is it possible to make some action in a new Spring trascation before a user stars work with it?在用户使用它之前,是否可以在新的 Spring 事务中执行一些操作?
【发布时间】:2021-05-23 05:30:45
【问题描述】:

我有 Spring Boot JPA 应用程序。

应用程序用户不时要求新事务。

我想在与该事务相关的数据库连接上执行一些操作,然后才能使用该事务。

“Just BEFORE”表示操作在执行带有@Transactional 注释的方法的第一条语句之前完成。

该操作是一个存储过程的执行,其参数取决于当前应用程序用户。

应用程序在技术帐户下使用 DB 工作。

提前谢谢你

【问题讨论】:

  • 请举一些例子,即使是伪代码。很难理解“就在之前”是什么意思。 “要求新的交易”也不是很清楚。
  • 你可以使用@Query创建一个repo方法来运行你的proc。然后只需在您的 @Transactional 方法中调用它即可。 baeldung.com/spring-data-jpa-query#2-native
  • @Wojciech Marciniak,我添加了一个解释“就在之前”的含义。

标签: spring jpa spring-transactions


【解决方案1】:
  • 第一个解决方案:

全部放在@Transacional带注释的方法中,在这里你的预交易,但这听起来很奇怪,部分先行。

这第一部分可以执行任何操作,如果出现任何问题,可能会抛出异常,从而强制事务回滚。这可能是一个@Repository 方法,一个@Query 如果需要(如Josh Pospisil 建议)或其他任何注释的方法。

  • 第二种解决方案(我更喜欢):

@RestController 的方法中调用 3 个方法:第一个 - 确定用户,第二个 - 使用此用户的数据执行 事务前 操作,第三个 - 实际的 @Transacional 方法做这项工作。

【讨论】:

  • 感谢@WojciechMarciniak 的建议。我们已经实现了一百多个控制器。因此,在每个控制器或事务方法中插入代码是一个明显但不是好的解决方案。我会尝试找到更简单的,无需太多编码。
猜你喜欢
  • 2012-11-27
  • 2016-09-27
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2015-07-16
相关资源
最近更新 更多