2017-12-20 12 views
1

私はspring-data-redisをspring-bootアプリケーションで使用して、redisで作業しようとしています。次のように私はJedisConnectionFactoryを作成しています:NoSuchMethodError:org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute

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:+') 
} 

は、それがため春ブートのための互換性のない依存関係のバージョンのものであり、スプリングデータレディス?どのバージョンを使用するのかはどのように知ることができますか?

+0

'spring-boot-starter'のバージョンを削除します。 'spring-web'依存性を' spring-boot-starter-web'に置き換え、 'spring-data-redis'依存性を' spring-boot-starter-data-redis'依存性で置き換えてください。あなたは互換性のあるバージョンを持っています。また、春の起動時の起動時に 'org.slf4j'の依存関係は必要ありません。 –

答えて

3

問題は、Spring Boot、Spring Data Commons、およびSpring Data Redisの間の非互換性に起因します。

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

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

+0

デプロイメント環境の要件のためにspring-bootをアップグレードできませんでした(Spring Boot 2.0にはgradle 4. +が必要で、3.2.xで作業しています)。また、必要な機能の一部を失ったため、私はspring-data-redisをダウングレードできませんでした。だから私はレタスの上に自分のクライアントを書くことになった。助けてくれてありがとう。 – user87407

1

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

java.lang.NoSuchMethodError: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute(Ljava/lang/String;)Ljava/util/Optional; at 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と削除...春-データ-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> 

ばねデータ特開2.0.2.RELEASE.jar(親との競合)

ばねデータ特開1.10.5.RELEASE.jar(分解バージョン)

このエラーが発生すると、誰もが異なるバージョンを持つ可能性があります。しかし、それが依存関係のバージョンであることを二重に確認すると、それは速くなります。