【发布时间】:2020-02-11 22:26:20
【问题描述】:
我有以下 maven 依赖项和配置设置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
@Configuration
@EnableMongoAuditing
public class MongoConfig {
@Bean
MongoTransactionManager transactionManager(MongoDbFactory mongoDbFactory) {
return new MongoTransactionManager(mongoDbFactory);
}
}
更新:我采用了建议的解决方案来创建一个带有@Transactional 的bean,并将其注入我的测试类。下面是我创建的服务 bean:
@Service
@Transactional
@RequiredArgsConstructor
public class MongoTransactionService {
private final UserRepo userRepo;
public void boundToFail() throws RuntimeException {
userRepo.save(User.builder().id("1").build());
throw new RuntimeException();
}
}
和我注入MongoTransactionService bean 的测试类:
@DataMongoTest(excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class,
includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = MongoTransactionService.class))
@ExtendWith(SpringExtension.class)
class MongoTransactionServiceTest {
@Autowired
UserRepo userRepo;
@Autowired
MongoTransactionService mongoTransactionService;
@Test
void testTransactional() {
try {
mongoTransactionService.boundToFail();
} catch (Exception e) {
// do something
}
val user = userRepo.findById("1").orElse(null);
assertThat(user).isNull();
}
}
我期待调用boundToFail(),它会抛出一个RuntimeException,将回滚保存的用户,但在调用后用户仍然会保留在数据库中。
【问题讨论】:
-
请查看参考文档中的事务管理部分进行测试。 docs.spring.io/spring/docs/current/spring-framework-reference/…
标签: spring-data spring-data-mongodb