Chcę użyć Cassandra 3.x w projekcie Spring Boot. Dowiedziałem się, że obecna wersja projektu Spring Data Cassandra obsługuje tylko Cassandrę 2.x. Tak więc chciałem użyć sterownika DataStax zamiast projektu Spring Data Cassandra. Dodałem jako zależność. Teraz mogę wstawiać wartości do obszaru kluczy w klastrze Cassandra. Ale gdy uruchomiony testy dla kontrolera REST pojawia się błądSpring Boot 1.4.1 i Cassandra 3.x
java.lang.NoClassDefFoundError: io/netty/handler/codec/http/FullHttpRequest
więc dodałem
compile 'io.netty:netty-all:4.1.6.Final'
jako zależność a błąd odszedł. Ale teraz wszystkie testy z użyciem
TestRestTemplate.postForObject(...)
lub
TestRestTemplate.put(...)
niepowodzeniem. Ale użycie
działa zgodnie z oczekiwaniami. Zakładam, że istnieje pewien konflikt w zależnościach Spring Boot i wersji Netty dodanej jako zależność.
Dowiedziałem się, że najnowsza wersja sterownika DataStax Cassandra do pracy bez dodatkowej zależności Netty to 2.1.5, która jest datowana na marzec 2015 i nie obsługuje Cassandry 3. Używanie tego sterownika wszystko działa, ale ja nie chcesz użyć starego sterownika.
UPDATE: Usunąłem zależność sterownika DataStax i próbowałem użyć wersji Spring Data Cassandra w wersji 1.5.0.M1 i przeskoczyłem wersje sterowników Spring, Spring Data Cassandra i Cassandra w buildscript.
ext['spring.version'] = '5.0.0.M2'
ext['spring-data-releasetrain.version'] = 'Ingalls-M1'
ext['cassandra-driver.version'] = '3.1.1'
Spowodowało następującego błędu:
java.lang.NoClassDefFoundError: io/netty/util/Timer
podczas korzystania z funkcjonalności Cassandra. Kiedy ponownie włączę Netty, funkcjonalność Cassandra działa, ale moje testy z użyciem TestRestTemplate.put
i .post
nie są już uruchomione. Dałem mu kolejną próbę uaktualnienia do Spring Boot w wersji 2.0.0.BUILD-SNAPSHOT, która zawiera także Spring Data Cassandra 1.5.0.M1. Teraz, gdy uruchamiam aplikację i używam funkcji sterownika DataStax, otrzymuję ten sam NoClassDefFoundError, jak poprzednio. Dodawanie Netty jako zależność zabija moje TestRestTemplate testy jednostkowe w oparciu znowu ...
UPDATE: TestRestTemplate
nie działa, ponieważ Wiosna Boot konfiguruje go używać Netty4ClientHttpRequestFactory
gdy znajdzie się na ścieżce klasy Netty i Netty4ClientHttpRequestFactory
nie wydają się działać .
Zobacz https://github.com/spring-projects/spring-boot/issues/7240 i https://jira.spring.io/browse/SPR-14860
Dla poprawki zobacz moją odpowiedź na to pytanie.
Nadchodzący release Wiosna danych Cassandra 1,5 wesprze Cassandra 3.x (patrz https://spring.io/blog/2016/07/27/spring-data-release-train-ingalls-m1-released i https://stackoverflow.com/questions/40020828/missing-artifact-spring-data-cassandra-1-5-0m1). Sterownik Datastax '3.1.1 wymaga Netty 4.0.37.Final. – mp911de