Spring声明式事务需要帮助

时间:2014-06-23 21:56:54

标签: spring spring-transactions

我正在编写一个石英作业,它将每天运行并将更新特定的数据库表。

相同的逻辑如下:

1)获取需要和更新的所有实体[因为我们正在使用hibernate] 2)迭代它们,获取每个对象并调用一个单独的私有方法来执行更新。

以上两个步骤在表示石英作业的公共方法内执行。

我想确保即使任何记录的更新失败,也不应影响其他记录。例如,如果找到50条记录并且在更新第31条记录时发生错误,则不应回滚之前的30条更新。

有人可以建议在这里使用哪种交易方法吗?应该是PROPAGATION_NOT_SUPPORTED还是PROPAGATION_REQUIRES_NEW或其他?

此致

1 个答案:

答案 0 :(得分:0)

使用私有方法使用声明式事务管理很困难......有关详细信息,请参阅http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#tx-decl-explained

对于您的用例,我看到两个选项:

  1. 使用程序化事务管理,因此如果有人读取代码,那么事务界限就在哪里
  2. 使用公共更新方法(更新一个实体)为持久性逻辑提取数据访问对象。您可以使用声明方法与此dao。
  3. 后一种方法可以帮助您分离问题,而不必关心石英作业中的事务和数据库相关代码。