当前位置: 首页 > 知识库问答 >
问题:

ClassNotFoundException:org.springframework.data.repository.query.查询方法评估上下文提供程序

易元青
2023-03-14

在R2DBC入门视频之后,我将一些存储库转换为以PostgreSQL作为数据库的现有Spring Boot应用程序中的反应式。该应用程序在转换前工作。在我尝试启动应用程序后,我得到以下错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'albumReactResource' defined in file [/app/classes/com/mycompany/myapp/web/rest/react/AlbumReactResource.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'albumReactRepository' defined in class path resource [com/mycompany/myapp/config/ReactDatabaseConfig.class]: Unsatisfied dependency expressed through method 'albumReactRepository' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'r2dbcRepositoryFactory' defined in class path resource [com/mycompany/myapp/config/ReactDatabaseConfig.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.data.r2dbc.repository.support.R2dbcRepositoryFactory] from ClassLoader [sun.misc.Launcher$AppClassLoader@4e0e2f2a]
...
gallery-app_1         | Caused by: java.lang.ClassNotFoundException: org.springframework.data.repository.query.QueryMethodEvaluationContextProvider
gallery-app_1         |  at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
gallery-app_1         |  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
gallery-app_1         |  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
gallery-app_1         |  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
gallery-app_1         |  ... 51 common frames omitted

QueryMethod odEvalue ationContextProvider类应该在那里。我猜数据库配置不能与现有数据库和Spring Data配置共存。

Spring Boot版本为2.0.5。发布。相关依赖项如下:

compile "org.springframework.boot:spring-boot-starter-webflux"
compile "org.springframework.data:spring-data-jdbc:1.0.0.r2dbc-SNAPSHOT"
compile "io.r2dbc:r2dbc-postgresql:1.0.0.M5"

这是与视频代码相同的数据库配置:

配置公共类ReactDatabaseConfig{

@Bean
PostgresqlConnectionFactory connectionFactory(){
    return new PostgresqlConnectionFactory(

            PostgresqlConnectionConfiguration.builder()
                .host("localhost")
                .database("gallery")
                .username("postgres")
                .password("")
                .build()
        );
    }

    @Bean
    DatabaseClient databaseClient(ConnectionFactory connectionFactory){

        return DatabaseClient.builder()
                .connectionFactory(connectionFactory)
                .build();
    }

    @Bean
    R2dbcRepositoryFactory r2dbcRepositoryFactory(DatabaseClient client){

        RelationalMappingContext context = new RelationalMappingContext();
        context.afterPropertiesSet();

        return new R2dbcRepositoryFactory(client, context);
    }

    @Bean
    AlbumReactRepository albumReactRepository(R2dbcRepositoryFactory factory){
        return factory.getRepository(AlbumReactRepository.class); <-- exceptions occurs
    }
 ...
}

一些相关的依赖信息如下:

+--- org.springframework.data:spring-data-jdbc:1.0.0.r2dbc-SNAPSHOT
|    +--- org.springframework.data:spring-data-commons:2.1.1.BUILD-SNAPSHOT -> 2.0.10.RELEASE (*)
...
+--- org.springframework.security:spring-security-data -> 5.0.8.RELEASE
|    +--- javax.xml.bind:jaxb-api:2.3.0
|    +--- org.springframework.data:spring-data-commons:2.0.10.RELEASE (*)
...
|    +--- org.springframework.data:spring-data-jpa:2.0.10.RELEASE
|    |    +--- org.springframework.data:spring-data-commons:2.0.10.RELEASE

如何解决此问题?

共有1个答案

双恩
2023-03-14

确保AlbuReactRepository正在扩展org.springframework.data.repository.reactive.ReactiveCrudRepository

而不是

org.springframework.data.repository.CrudRepository
 类似资料:
  • 我的公共类中有一个私有子类。这个私有类扩展了AsyncTask。在onPostExecute()中,我必须通过自定义适配器发送对象列表。但问题是,当我获取主公共类(私有子类的父类)的“上下文”时,它在@Override(OnPostExecute())上给出了一个错误。 它在@Override上给出了一个错误。我必须获取私有子类的父类的上下文(这扩展了asyncTask并具有onPostExecu

  • 我正在使用aws无服务器java容器将Jersey服务包装到aws Lambda中。我决定使用函数别名进行“测试”和“生产”阶段,最终指向lambda函数的不同版本。 我需要在中选择一些属性。基于该别名的属性文件,基本上是因为我需要与“test”或“prod”DB对话,或者使用不同的endpoint来调用外部web服务。 为此,我需要调用Context对象的方法getInvokedFunction

  • 这是我的错误: 好了,够清楚了。我试图通过实现这个解决方案来保持请求上下文: 如何在异步任务执行器中启用请求范围 null 我已经试过了,但没有成功: 如何在异步任务执行器中启用请求范围 如果有关系: 为应用程序中的所有线程设置ThreadContext 但是上下文总是空的...

  • 问题内容: 我正在做一个很大的项目,有很多注入。当前,我们正在使用一个类,该类为需要一次的每次注入实现,并且它们大多具有一个行方法。 每当我需要一个新的提供程序时,创建一个新的类就变得很烦人。使用提供程序类比使用方法有什么好处,反之亦然? 问题答案: 据我所知,它们在大多数简单情况下是完全等效的。 无论哪种样式,即使键绑定到类或实例,Guice都可以让您注入和。如果直接获取实例,Guice会自动调

  • 问题内容: 我正在尝试以下代码,该代码向RDD中的每一行添加一个数字,并使用PySpark返回RDD列表。 输入文件(sample.txt)中的内容为: 我期待这样的输出(将rdd中的数字分别添加0、1、2): 而实际输出是: 这意味着无论 范围(4) 为何,该理解仅将值3用于变量i 。 为什么会发生这种现象? 问题答案: 它的发生是由于Python的后期绑定,而不是特定于(Py)Spark的。将