Не знаю, используется ли весенняя загрузка, если это так, AsyncCassandraOperations (AsyncCassandraTemplate является классом реализации) должен создаваться автоматически.Если ошибка показывает, что вам нужен bean-компонент AsyncCassandraOperations, прямой способ - создать его, как показано ниже.
@Bean
AsyncCassandraTemplate asyncCassandraTemplate(Session session) {
return new AsyncCassandraTemplate(session);
}
Поскольку вы используете интерфейс репозитория данных Spring, вы также можете использовать интерфейс ReactiveCrudRepository
для обновленияили вставьте объекты сущностей в Cassandra, что показано в в этом примере проекта данных весны , в качестве альтернативного способа использования класса AsyncCassandraTemplate
.
В случае использования ReactiveCrudRepository
иЧто касается того, что вы хотите сделать, ваш код нуждается в следующих изменениях.
- измените тип возврата
WRRepository.findByCol1AndCol2AndCol3(String, boolean, String)
с List<WRpojo>
на Flux<WRpojo>
, чтобы в полной мере использовать реактивную функциональность. - изменить тип возвращаемого значения
persist(List<WRpojo>)
с логического на Mono<Void>
, в результате чего результат также не будет блокироваться. - изменить
persist(List<WRpojo>)
на следующее.
public Mono<Void> persist(List<WRpojo> l_wr) {
Flux<WRpojo> l_old_wr = objWRRepository.findByCol1AndCol2AndCol3("1", false, "2").doOnNext(s -> s.setStale(true));
return objWRRepository.saveAll(l_old_wr).thenMany(objWRRepository.saveAll(l_wr)).then();
}
В реактивном программировании, в основном, мы не блокируем код, это означает, что где-то возвращенные Mono<Void>
должны быть подписаны где-то вниз по течению, если вы хотите заблокировать и ждать всехоперации завершены, вы можете позвонить block()
на Mono<Void>
, что не рекомендуется.