Java Spring:Unittest中的回滚事务处理
我有一个复杂的服务方法,从数据库加载大量数据。因为它只读取和验证数据,所以我想确保 JPA Hibernate不会浪费时间检查大持久性 变化的背景。 不会写入对数据的意外更改 到db。 因此,在我的服务结束时,我有这个代码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
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。在这种情况下,我不需要事务处理,甚至不需要完整的应用程序上下文。只是一个普通的单元测试。