Java NoSuchMethodError:org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute
我试图在spring引导应用程序中使用spring数据redis来处理redis。我正在创建Java NoSuchMethodError:org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute,java,spring-boot,jedis,spring-data-redis,Java,Spring Boot,Jedis,Spring Data Redis,我试图在spring引导应用程序中使用spring数据redis来处理redis。我正在创建JedisConnectionFactory,如下所示: RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); configuration.setHostName("localhost"); configuration.setPort(6379); JedisConnectionFactory co
JedisConnectionFactory
,如下所示:
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
configuration.setHostName("localhost");
configuration.setPort(6379);
JedisConnectionFactory connectionFactory = new JedisConnectionFactory(configuration);
它抛出异常:
Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute(Ljava/lang/String;)Ljava/util/Optional;
at org.springframework.data.redis.repository.configuration.RedisRepositoryConfigurationExtension.registerBeansForRoot(RedisRepositoryConfigurationExtension.java:88)
at org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:118)
at org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport.registerBeanDefinitions(AbstractRepositoryConfigurationSourceSupport.java:59)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:352)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:143)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:336)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:246)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:270)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:686)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:524)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
at com.test.redis.RedisTesterApplication.main(RedisTesterApplication.java:11)
我的身材。格雷德尔:
dependencies {
compile('org.springframework.data:spring-data-redis:2.0.2.RELEASE')
compile('redis.clients:jedis:2.9.0')
compile('org.json:json:20160810')
compile('org.springframework.boot:spring-boot-starter:1.4.2.RELEASE')
compile("org.springframework:spring-web")
compile('org.slf4j:slf4j-api:+')
}
是因为spring boot和spring data redis的依赖版本不兼容吗?我如何知道要使用哪个版本?您的问题来自Spring Boot、Spring Data Commons和Spring Data Redis之间的不兼容 理想情况下,在使用Spring Boot时,您不需要指定任何版本,因为Spring Boot为您的依赖项提供了依赖项管理,以确保跨引用库的兼容性
一般来说,SpringBoot应该是依赖版本的主版本。Spring Data 2.x与Spring Boot 1.x不兼容。请升级到最近的Spring启动里程碑(目前为2.0 M7)或将Spring Data Redis降级到1.7.x。尽管许多人受益于此框架,但有时需要花费更多的时间对其依赖性进行故障排除。 这是一个已知的问题,我有如下相同的问题 java.lang.NoSuchMethodError:org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute(Ljava/lang/String;)Ljava/util/Optional; 在org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension.postProcess(JpaRepositoryConfigExtension.java:125)~[spring-data-jpa-2.0.2.RELEASE.jar:2.0.2.RELEASE] 我注意到了第一个jar文件及其版本-2.0.2,并删除了该文件。。spring-data-jpa-2.0.2.RELEASE.jar。之后,我让家长决定它的依赖关系,并下载了1.10.5版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
....
</dependencies>
org.springframework.boot
spring启动程序父级
1.4.2.1发布
org.springframework.boot
spring引导启动器数据jpa
....
spring-data-jpa-2.0.2.RELEASE.jar(与父级冲突)
spring-data-jpa-1.10.5.RELEASE.jar(已解析版本)
遇到此错误时,每个人都可能有不同的版本。但是,如果您先仔细检查它的依赖项版本,速度会更快。您需要将spring boot版本更新到2.0.0+
dependencies {
compile('org.springframework.data:spring-data-redis:2.0.2.RELEASE')
compile('redis.clients:jedis:2.9.0')
compile('org.json:json:20160810')
compile('org.springframework.boot:spring-boot-starter:2.0.0.RELEASE')
compile("org.springframework:spring-web")
compile('org.slf4j:slf4j-api:+')
}
这将使用与此版本的spring data redis兼容的spring core 5.0.0+。删除
spring boot starter的版本。将spring-web
依赖项替换为spring-boot-starter-web
,将spring-data-redis
依赖项替换为spring-boot-starter-data-redis
依赖项。这样你就有了兼容的版本。您也不需要依赖于org.slf4j
spring boot启动程序来解决这个问题。由于部署环境的要求,我无法升级spring boot(spring boot 2.0需要gradle 4.+,我们正在使用3.2.x)。我也不能降级SpringDataRedis,因为我失去了一些必需的功能。所以我最终在莴苣上写下了我自己的客户。谢谢你的帮助。