Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring:Unittest中的回滚事务处理_Java_Spring_Spring Boot_Transactions_Spring Transactions - Fatal编程技术网

Java Spring:Unittest中的回滚事务处理

Java Spring:Unittest中的回滚事务处理,java,spring,spring-boot,transactions,spring-transactions,Java,Spring,Spring Boot,Transactions,Spring Transactions,我有一个复杂的服务方法,从数据库加载大量数据。因为它只读取和验证数据,所以我想确保 JPA Hibernate不会浪费时间检查大持久性 变化的背景。 不会写入对数据的意外更改 到db。 因此,在我的服务结束时,我有这个代码 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly() 我的单元测试对所有db访问都有模拟,所以事务处理不是问题。我有@SpringBootTest的集成测试和完整的trx支持。不幸的是,r

我有一个复杂的服务方法,从数据库加载大量数据。因为它只读取和验证数据,所以我想确保

JPA Hibernate不会浪费时间检查大持久性 变化的背景。 不会写入对数据的意外更改 到db。 因此,在我的服务结束时,我有这个代码

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
我的单元测试对所有db访问都有模拟,所以事务处理不是问题。我有@SpringBootTest的集成测试和完整的trx支持。不幸的是,rollback语句在纯单元测试中失败

有没有一种简单的方法来获取rollback语句?在单元测试中什么都不做?

考虑使用@TransactionalreadOnly=true而不是TransactionalSpectSupport.currentTransactionStatus.setRollbackOnly

如果事务实际上是只读的,则可以将布尔标志设置为true,从而允许在运行时进行相应的优化


现在我只写了一个很容易模仿的小组件:

@Component
public class RollBacker {

    public void setRollBackOnly() {
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }

}

毕竟,TransactionSpect支持的单例方法使得单元测试在这里变得困难。IMHO TransactionSpect支持应该是一个Springbean。

您有hibernate的自动提交功能吗?您调用的方法的传播级别是什么?这是一个纯单元测试。没有数据库、休眠和事务处理。我只想测试服务的内部逻辑。所有内容都回滚只是一个安全/性能度量。正如问题中提到的,没有@SpringBootTest。在这种情况下,我不需要事务处理,甚至不需要完整的应用程序上下文。只是一个普通的单元测试。