2016-10-25 17 views
6

Spring BootプロジェクトでCassandra 3.xを使いたいです。 Spring Data Cassandraプロジェクトの現在のリリース版では、Cassandra 2.xのみがサポートされていることが分かりました。だから私はSpring Data Cassandraプロジェクトの代わりにDataStaxドライバを使いたいと思っていました。私はSpring Boot 1.4.1とCassandra 3.x

compile 'com.datastax.cassandra:cassandra-driver-core:3.1.1' 

を依存関係として追加しました。これで、カサンドラクラスターのキースペースに値を挿入できます。 RESTコントローラのテスト、私はエラーを取得する

java.lang.NoClassDefFoundError: io/netty/handler/codec/http/FullHttpRequest 

を実行している場合に依存性とエラーが離れていったとしてしかし、だから私は

compile 'io.netty:netty-all:4.1.6.Final' 

を追加しました。しかし、今

TestRestTemplate.postForObject(...) 

または

TestRestTemplate.put(...) 

を使用して、すべてのテストが失敗します。しかし、使用

TestRestTemplate.getForObject(...) 

期待どおりに動作します。私は、Spring Bootの依存関係と、依存関係として追加したNettyのバージョンにいくつかの衝突があると仮定します。

DataStax Cassandraドライバの最新バージョンが、追加のNetty依存関係なしで動作することがわかったのは、2015年3月3日で、Cassandra 3をサポートしていない2.1.5です。このドライバを使用するとすべて動作しますが、古いドライバを使いたい。

更新日: DataStaxドライバの依存関係を削除し、1.5.0.M1バージョンのSpring Data Cassandraを使用しようとしましたが、Spring、Spring Data CassandraおよびCassandraドライバのバージョンがbuildscriptで上書きされました。

ext['spring.version'] = '5.0.0.M2' 
ext['spring-data-releasetrain.version'] = 'Ingalls-M1' 
ext['cassandra-driver.version'] = '3.1.1' 

これは、次のエラーが発生しました:

java.lang.NoClassDefFoundError: io/netty/util/Timer 

カサンドラの機能を使用している場合。 Nettyを再度組み込むと、Cassandraの機能は動作しますが、TestRestTemplate.put.postを使ったテストはもう実行されません。 Spring Data Cassandra 1.5.0.M1も含まれている、Spring Boot Version 2.0.0.BUILD-SNAPSHOTにアップグレードしようとしました。今私は、アプリケーションを起動し、DataStaxドライバの機能を使用すると、以前と同じNoClassDefFoundErrorを取得します。依存関係が再び私TestRestTemplateベースのユニットテストを殺すよう...ネッティーを追加

UPDATE:春ブーツは、それがクラスパス上にネッティーを見つけ、Netty4ClientHttpRequestFactoryが動作するようには思えないときNetty4ClientHttpRequestFactoryを使用するように設定しているためTestRestTemplateが動作しません。

は、修正のためにhttps://github.com/spring-projects/spring-boot/issues/7240https://jira.spring.io/browse/SPR-14860

を参照してください、この質問に私の答えを参照してください。

+2

次期リリースの春データカサンドラ1.5は、カサンドラ3.xのをサポートします(https://spring.io/blog/2016/07/27/spring-data-release-train-ingalls-m1-releasedを参照してくださいhttps://stackoverflow.com/questions/40020828/missing-artifact-spring-data-cassandra-1-5-0m1)。 Datastax '3.1.1ドライバには、4.0.37.finalのnettyが必要です。 – mp911de

答えて

4

私はSpring Data Cassandra 1.5.0.M1とCassandraドライバ3.1を使用しています。1次のバージョンの上書きを使用してください:

ext['spring.version'] = '5.0.0.M2' 
ext['spring-data-releasetrain.version'] = 'Ingalls-M1' 
ext['cassandra-driver.version'] = '3.1.1' 

Cassandraドライバ機能を動作させるためには、依存関係としてNettyを追加する必要がありました。 TestRestTemplate.postForObject(...)を作るために

compile 'io.netty:netty-all:4.1.6.Final' 

TestRestTemplate.put(...)私はRestTemplateBuilder@Beanを提供し、SimpleClientHttpRequestFactoryを使用するように設定する必要がありました。

@TestConfiguration 
static class TestConfig { 
    @Bean 
    public RestTemplateBuilder restTemplateBuilder() { 
     return new RestTemplateBuilder().detectRequestFactory(false).requestFactory(SimpleClientHttpRequestFactory.class); 
    } 
} 
+0

問題はrestTemplate.exchange(...)にも表示されますが、まだ春ブートバージョン1.5.1 ...質問と回答を投稿していただきありがとうございます。 – Hasson

関連する問題