Tôi muốn sử dụng Cassandra 3.x trong dự án Khởi động mùa xuân. Tôi phát hiện ra rằng phiên bản phát hành hiện tại của dự án Spring Data Cassandra chỉ hỗ trợ Cassandra 2.x. Vì vậy, tôi muốn sử dụng DataStax Driver thay vì dự án Spring Data Cassandra. Tôi đã thêmKhởi động mùa xuân 1.4.1 và Cassandra 3.x
compile 'com.datastax.cassandra:cassandra-driver-core:3.1.1'
làm phụ thuộc. Bây giờ tôi có thể chèn các giá trị vào một keyspace trên một cụm Cassandra. Nhưng khi chạy thử nghiệm cho một bộ điều khiển phần còn lại tôi nhận được một lỗi
java.lang.NoClassDefFoundError: io/netty/handler/codec/http/FullHttpRequest
Vì vậy, tôi đã thêm
compile 'io.netty:netty-all:4.1.6.Final'
như một sự phụ thuộc và các lỗi đi. Nhưng bây giờ tất cả các bài kiểm tra sử dụng
TestRestTemplate.postForObject(...)
hoặc
TestRestTemplate.put(...)
thất bại. Nhưng sử dụng
TestRestTemplate.getForObject(...)
hoạt động như mong đợi. Tôi cho rằng có một số xung đột trong các phụ thuộc của Spring Boot và phiên bản Netty mà tôi đã thêm vào dưới dạng phụ thuộc.
Tôi phát hiện ra phiên bản mới nhất của trình điều khiển Cassandra DataStax hoạt động mà không có sự phụ thuộc Netty bổ sung là 2.1.5, ngày tháng 3 năm 2015 và không hỗ trợ Cassandra 3. Sử dụng trình điều khiển này mọi thứ hoạt động nhưng tôi không muốn sử dụng một trình điều khiển cũ.
CẬP NHẬT: Tôi đã xóa phụ thuộc trình điều khiển DataStax và cố sử dụng phiên bản 1.5.0.M1 của Spring Data Cassandra và khắc phục các phiên bản trình điều khiển Spring, Spring Data Cassandra và Cassandra trong bản dựng.
ext['spring.version'] = '5.0.0.M2'
ext['spring-data-releasetrain.version'] = 'Ingalls-M1'
ext['cassandra-driver.version'] = '3.1.1'
Điều này dẫn đến các lỗi sau:
java.lang.NoClassDefFoundError: io/netty/util/Timer
khi sử dụng chức năng Cassandra. Khi tôi bao gồm Netty một lần nữa, chức năng Cassandra hoạt động nhưng các thử nghiệm của tôi sử dụng TestRestTemplate.put
và .post
không hoạt động nữa. Tôi đã thử một lần nữa để nâng cấp lên Spring Boot Version 2.0.0.BUILD-SNAPSHOT cũng bao gồm Spring Data Cassandra 1.5.0.M1. Bây giờ khi tôi khởi động ứng dụng và sử dụng chức năng DataStax Driver, tôi nhận được cùng NoClassDefFoundError như trước đây. Thêm Netty như một sự phụ thuộc giết TestRestTemplate kiểm tra đơn vị có trụ sở của tôi một lần nữa ...
UPDATE: TestRestTemplate
không được làm việc bởi vì mùa xuân Boot cấu hình nó để sử dụng Netty4ClientHttpRequestFactory
khi nó tìm thấy Netty trên classpath và Netty4ClientHttpRequestFactory
dường như không làm việc .
Xem https://github.com/spring-projects/spring-boot/issues/7240 và https://jira.spring.io/browse/SPR-14860
Đối với một sửa chữa xem câu trả lời của tôi cho câu hỏi này.
Việc phát hành sắp tới mùa xuân dữ liệu Cassandra 1.5 sẽ hỗ trợ Cassandra 3.x (xem https://spring.io/blog/2016/07/27/spring-data-release-train-ingalls-m1-released và https://stackoverflow.com/questions/40020828/missing-artifact-spring-data-cassandra-1-5-0m1). Trình điều khiển Datastax '3.1.1 yêu cầu netty 4.0.37.Final. – mp911de