gpt4 book ai didi

reactive - 将 Spring Data 的 ReactiveCrudRepository 应用于 Redis

转载 作者:行者123 更新时间:2023-12-02 18:10:46 25 4
gpt4 key购买 nike

我正在使用 webflux 来玩 Spring Boot 2。我正在尝试使用 ReactiveSortingRepository 来简化 redis 操作。

public interface DataProfileRepository extends ReactiveSortingRepository<DataProfileDTO, String> {
}

只需使用此接口(interface)即可

Mono<DataProfileDTO> tmp = this.dataProfileRepository.findById(id);

异常(exception):

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [com.tradeshift.dgps.dto.DataProfileDTO] to type [reactor.core.publisher.Mono<?>]
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:321) ~[spring-core-5.0.2.RELEASE.jar:5.0.2.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:194) ~[spring-core-5.0.2.RELEASE.jar:5.0.2.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:174) ~[spring-core-5.0.2.RELEASE.jar:5.0.2.RELEASE]
at org.springframework.data.repository.util.ReactiveWrapperConverters.toWrapper(ReactiveWrapperConverters.java:197) ~[spring-data-commons-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.data.repository.core.support.QueryExecutionResultHandler.postProcessInvocationResult(QueryExecutionResultHandler.java:104) ~[spring-data-commons-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:587) ~[spring-data-commons-2.0.2.RELEASE.jar:2.0.2.RELEASE]

被抛出。

此存储库的行为与reactor不匹配,我可以在 Debug模式下看到,从redis获取了实际的DataProfileDTO。尝试时失败了:

GENERIC_CONVERSION_SERVICE.convert(reactiveObject, targetWrapperType);

ReactiveWrapperConverters.toWrapper

我去谷歌搜索,似乎 Spring Data Redis 2.0 没有提到响应式(Reactive)存储库支持。我想知道我的代码中是否做错了什么,或者 Spring Data Redis 2.0 还不支持 ReactiveCrudRepository。

最佳答案

根据 Spring 的文档 Reactive Redis Support ,与具有反应式支持的 Redis 接口(interface)的最高抽象级别是 ReactiveRedisTemplateReactiveRedisConnection是使用二进制值(ByteBuffer)作为输入和输出的较低抽象。

没有提到对 react 性存储库的支持。您还可以引用spring-data github repo中的官方 react 示例。 .

为了让这一切发挥作用,您需要在您使用的驱动程序中提供响应式(Reactive)支持 - 目前为 lettuce .

虽然不理想,但替代方案是 Flux.fromIterable() 。您可以使用阻塞存储库并以 react 方式处理结果。

public interface DataProfileRepository extends CrudRepository<DataProfileDTO, String> {
}

并包裹它:

Flux.fromIterable(dataProfileRepository.findById(id)), DataProfileDTO.class))

关于reactive - 将 Spring Data 的 ReactiveCrudRepository 应用于 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48011729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com