web-dev-qa-db-ja.com

NoSuchMethodError:org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute

Redisを使用するために、spring-bootアプリケーションでspring-data-redisを使用しようとしています。次のように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)

私のbuild.gradle:

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の依存関係バージョンに互換性がないためですか?使用するバージョンを知るにはどうすればよいですか?

9
user87407

あなたの問題は、Spring Boot、Spring Data Commons、Spring Data Redisの非互換性に起因しています。

Spring Bootには、参照ライブラリ間の互換性を保証する依存関係の依存関係管理が付属しているため、Spring Bootの Gradleプラグイン を使用する場合、バージョンを指定しないことが理想的です。

一般的に、Spring Bootは依存関係バージョンのマスターである必要があります。 Spring Data 2.xはSpring Boot 1.xと互換性がありません。最新のSpring Bootマイルストーン(現在は2.0 M7)にアップグレードするか、Spring Data Redisを1.7.xにダウングレードしてください。

15
mp911de

多くの人がこのフレームワークの恩恵を受けていますが、依存関係のトラブルシューティングに時間がかかる場合があります。これは既知の問題であり、以下と同じ問題がありました。

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>

spring-data-jpa-2.0.2.RELEASE.jar(親との競合)

spring-data-jpa-1.10.5.RELEASE.jar(解決済みバージョン)

このエラーが発生した場合、全員が異なるバージョンを持っている可能性があります。ただし、最初に依存関係のバージョンを再確認すると、より高速になります。

5
Simon Park

スプリングブートバージョンを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+を使用します。

1