У меня есть загрузочное приложение Spring. Как часть этого, я должен отслеживать простой объект ActiveVersion, который имеет два поля, тип и версию. Я сохраняю этот объект в Redis и Mon go. ActiveVersionCacheRepository - это реактивный репозиторий Redis (используя реактивныйRedisTemplate), а ActiveVersionRepository - реактивный репозиторий mon go. Это часть ActiveVersionService. Методы для извлечения и сохранения activeVersion:
fun getActiveVersion(type: String): Mono<ActiveVersion> {
return activeVersionCacheRepository.findByKey(type)
.switchIfEmpty(
Mono.defer{activeVersionRepository.findByType(type)}
).switchIfEmpty(
Mono.defer{persist(ActiveVersion(type,1))}
)
}
fun persist(activeVersion: ActiveVersion): Mono<ActiveVersion> {
activeVersionCacheRepository.save(activeVersion.type, activeVersion)
return activeVersionRepository.save(activeVersion)
}
Это мой метод тестирования:
@Test
fun getNewActiveVersion(){
var activeVersion = activeVersionService.getActiveVersion("newDummy").block()
assertEquals(activeVersion?.version,1)
}
Моя проблема заключается в том, когда я отлаживаю метод тестирования и go шаг за шагом в идеале и оцените постоянные строки с помощью блочного метода, такого как: activeVersionCacheRepository.save(activeVersion.type, activeVersion).block()
активная версия действительно сохраняется в redis. Но когда я просто go просматривал код без оценки с помощью блока (или просто запустив тест без отладки), ничего не сохранялось в redis. Я новичок в реактивном программировании, поэтому, возможно, я что-то упустил в switchIfEmpty или где-то еще.