Я хочу использовать Cassandra 3.x в проекте Spring Boot. Я узнал, что версия текущей версии Spring Data Cassandra поддерживает только Cassandra 2.x. Поэтому я хотел использовать драйвер DataStax вместо проекта Spring Data Cassandra. Я добавилSpring Boot 1.4.1 и Cassandra 3.x
compile 'com.datastax.cassandra:cassandra-driver-core:3.1.1'
как зависимость. Теперь я могу вставлять значения в пространство ключей в кластере Cassandra. Но при выполнении тестов для контроллера 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 - 2.1.5, датированная мартом 2015 года и не поддерживающая Cassandra 3. Используя этот драйвер, все работает, но я не хотите использовать старый драйвер.
UPDATE: Я удалил зависимость драйвера DataStax и попытался использовать версию Spring Data Cassandra версии 1.5.0.M1 и переопределить версии драйвера 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
функциональность при использовании Cassandra. Когда я снова включаю Netty, функция Cassandra работает, но мои тесты с использованием TestRestTemplate.put
и .post
больше не запускаются. Я дал ему еще одну попытку обновления до Spring Boot Version 2.0.0.BUILD-SNAPSHOT, которая также включает Spring Data Cassandra 1.5.0.M1. Теперь, когда я запускаю приложение и использую функциональность DataStax Driver, я получаю тот же NoClassDefFoundError, что и раньше. Добавление Нетти как зависимость снова убивает мои модульные тесты на основе TestRestTemplate ...
UPDATE: TestRestTemplate
не работает, потому что Spring Загрузочный настраивает его использовать Netty4ClientHttpRequestFactory
, когда он находит Нетти на пути к классам и Netty4ClientHttpRequestFactory
не похож на работу ,
См https://github.com/spring-projects/spring-boot/issues/7240 и https://jira.spring.io/browse/SPR-14860
Для исправления см моего ответа на этот вопрос.
Предстоящий релиз Spring Data Cassandra 1.5 будет поддерживать Cassandra 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. – mp911de