【发布时间】:2011-04-30 16:38:39
【问题描述】:
我希望能够验证每个工作单元是在其自己的事务中完成,还是作为单个全局事务的一部分。
我有一个方法(使用 spring 和 hibernate 定义),其形式为:
private void updateUser() {
updateSomething();
updateSomethingElse();
}
这是从两个地方调用的,用户登录时的网站和每天运行的批处理作业。对于 Web 服务器上下文,它将使用 Web 服务器创建的事务运行。对于批处理作业,它必须为每个用户有一个事务,以便如果在此方法期间发生故障,事务将回滚。所以我们有两种方法:
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void updateUserCreateNewTransaction() {
updateUser();
}
@Transactional(propagation=Propagation.REQUIRED)
public void updateUserWithExistingTransaction() {
updateUser();
}
updateUserCreateNewTransaction() 从批处理作业调用,updateUserWithExistingTransaction() 从 Web 服务器上下文调用。
这行得通。但是,不改变(批次的)这种行为是非常重要的,所以我希望创建一个测试来测试这种行为。如果可能的话,我想在不更改代码的情况下这样做。
所以对我开放的一些选项是:
计算在 批处理运行期间的数据库 工作。
-
在 updateSomethingElse() 方法中以某种微妙的方式更改数据,以便至少有一个用户更新失败,并检查该用户的 updateSomething() 是否尚未发生。
李> 代码审查。
1 是一个非常依赖数据库的方法,我如何保证hibernate 无论如何都不会创建事务? 2似乎更好,但设置起来非常复杂。 3 不太实用,因为我们需要为每个版本都做一个。
那么,有没有人可以让我测试这段代码的方法,最好是通过系统测试或集成测试?
【问题讨论】:
标签: java database spring jpa transactional