如何设置上下文提供程序以使我的spel扩展在 @Query("...")
?
我们在postgres中使用r2dbc。
据我所知,我需要注册一个 ReactiveExtensionAwareQueryMethodEvaluationContextProvider
但我找不到任何关于如何做到这一点的文件。有没有一个特定的豆子或者 @Configuration
用它吗?
我找到了这个单元测试。它是monogo而不是r2dbc,但我认为这是相同的原则-但是因为它是一个单元测试,所以它没有显示如何在我的普通代码中设置上下文。
试图这样实现它并不能提供 my()
spel中的方法
@Configuration
class MySpELExtensionConf {
@Bean
fun mySpELExtension() : ReactiveEvaluationContextExtension {
return ReactiveSpelExtension()
}
class ReactiveSpelExtension : ReactiveEvaluationContextExtension {
override fun getExtension(): Mono<out EvaluationContextExtension> {
return Mono.just(SpelExtension.INSTANCE)
}
override fun getExtensionId(): String {
ReactiveQueryMethodEvaluationContextProvider.DEFAULT
return "mySpELExtension"
}
}
enum class SpelExtension : EvaluationContextExtension {
INSTANCE;
override fun getRootObject(): Any? {
return this
}
override fun getExtensionId(): String {
return "mySpELExtension"
}
fun my(): String {
return "x"
}
}
}
我现在看到 mySpELExtension
在应用程序上下文中,但是使用 my()
a中的方法 @Query
不可能:
interface MyRepository : ReactiveCrudRepository<MyEntity, Long> {
@Query("""
...
:#{my()}
...
""")
fun findByMyQuery() : Flux<MyEntity>
}
结果
EL1004E: Method call: Method my() cannot be found on type java.lang.Object[]
1条答案
按热度按时间332nm8kg1#
我利用
PostBeanProcessor
.请注意,自定义
R2dbcRepositoryFactoryBean
为…工作CoroutineCrudRepository
而且您可能需要根据所使用的存储库定制不同的工厂bean。