Я работаю над проектом, который использует Kotlin, Spring Boot, Hibernate (все в последней версии), и я хотел бы сделать его реактивным с помощью среды WebFlux из Spring.
Проблема в том, что я могуне используйте ReactiveCrudRepository
, потому что веб-приложение должно использовать базу данных Oracle и, следовательно, Hibernate.Поэтому я не мог найти способ, как использовать неблокирующий доступ к базе данных Oracle SQL (только бесплатные платформы).
Мой вопрос:
Можно ли использовать это так:
- Случайный
CrudRepository
, который блокирует - Служба, которая использует corountines и возвращает все как
Mono
Пример кода службы:
fun getAllLanguages(): Mono<Collection<ProgrammingLanguage>> = async { repository.findAll() }.asMono()
После этого будет контроллер с:
fun listProgrammingLanguagesReactive() = mono(Unconfined) {
service.also { logger.info { "requesting list of programming languages" } }
.getAllLanguages()
.also { logger.info { "responding with list of programming languages" } }
}
Этот подход работает, но я не уверен, будет ли он работать постоянно и не является ли это ужасной практикой и т. Д.