Если вы хотите начать использовать базу данных Cassandra NoSQL с Spring Boot , лучшим ресурсом, вероятно, являются образцы Cassandra, доступные здесь, и документация Spring data Cassandra .
Здесь я возьму немного более окольный путь, фактически установив Cassandra локально и выполнив базовый тест на него, и я намерен развить этот пример в более полный пример со следующим сообщением в блоге.
Настройка локального экземпляра Cassandra
Ваш пробег может отличаться, но самый простой способ запустить локальную установку Cassandra — использовать утилиту Cassandra cluster manager (ccm), доступную здесь .
|
1
|
ccm create test -v 2.2.5 -n 3 -s |
Или более традиционный подход может просто загрузить его с сайта Apache . Если вы следуете за мной, лучше всего подойдет версия Cassandra 2.2.5.
С помощью любого из вышеперечисленных, запустите Cassandra, используя ccm:
|
1
|
ccm start test |
или с загрузкой с сайта Apache:
|
1
|
bin/cassandra -f |
Флаг -f будет держать процесс на переднем плане, так что остановить процесс будет очень легко, как только вы закончите с примерами.
Теперь подключитесь к этому экземпляру Cassandra:
|
1
|
bin/cqlsh |
и создайте образец пространства ключей Cassandra:
|
1
|
CREATE KEYSPACE IF NOT EXISTS sample WITH replication = {'class':'SimpleStrategy', 'replication_factor':1}; |
Использование Spring Boot Cassandra
Вдоль всего, что связано с Spring Boot , есть стартер, доступный для добавления всех соответствующих зависимостей Cassandra, указанных здесь как зависимости gradle:
|
1
|
compile('org.springframework.boot:spring-boot-starter-data-cassandra') |
Это будет включать зависимости, которые запускают автоматическую настройку для связанных с Cassandra экземпляров — в основном сеанса Cassandra .
Для примера я определил объект под названием Hotel, который определяется следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
package cass.domain;import org.springframework.data.cassandra.mapping.PrimaryKey;import org.springframework.data.cassandra.mapping.Table;import java.io.Serializable;import java.util.UUID;@Table("hotels")public class Hotel implements Serializable { private static final long serialVersionUID = 1L; @PrimaryKey private UUID id; private String name; private String address; private String zip; private Integer version; public Hotel() { } public Hotel(String name) { this.name = name; } public UUID getId() { return id; } public String getName() { return this.name; } public String getAddress() { return this.address; } public String getZip() { return this.zip; } public void setId(UUID id) { this.id = id; } public void setName(String name) { this.name = name; } public void setAddress(String address) { this.address = address; } public void setZip(String zip) { this.zip = zip; } public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; }} |
и хранилище данных Spring для управления этим объектом:
|
1
2
3
4
5
6
|
import cass.domain.Hotel;import org.springframework.data.repository.CrudRepository;import java.util.UUID;public interface HotelRepository extends CrudRepository<Hotel, UUID>{} |
Для хранения этой сущности требуется соответствующая таблица cql:
|
1
2
3
4
5
6
7
8
|
CREATE TABLE IF NOT EXISTS sample.hotels ( id UUID, name varchar, address varchar, zip varchar, version int, primary key((id))); |
По сути, поддержка данных Spring для Cassandra теперь будет управлять всеми операциями CRUD этого объекта, и тест выглядит следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import cass.domain.Hotel;import cass.repository.HotelRepository;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.SpringApplicationConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.UUID;import static org.hamcrest.MatcherAssert.assertThat;import static org.hamcrest.Matchers.equalTo;@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(classes = SampleCassandraApplication.class)public class SampleCassandraApplicationTest { @Autowired private HotelRepository hotelRepository; @Test public void repositoryCrudOperations() { Hotel sample = sampleHotel(); this.hotelRepository.save(sample); Hotel savedHotel = this.hotelRepository.findOne(sample.getId()); assertThat(savedHotel.getName(), equalTo("Sample Hotel")); this.hotelRepository.delete(savedHotel); } private Hotel sampleHotel() { Hotel hotel = new Hotel(); hotel.setId(UUID.randomUUID()); hotel.setName("Sample Hotel"); hotel.setAddress("Sample Address"); hotel.setZip("8764"); return hotel; }} |
Вот репозиторий Github с этим образцом. В этом примере пока не так много, в следующем посте я улучшу этот пример, чтобы учесть тот факт, что очень важно понимать распределение данных по кластеру в системе NoSQL и то, как сущность, такая как Hotel, может здесь быть смоделирован для эффективных операций CRUD.
| Ссылка: | Первые шаги к Spring Boot Cassandra от нашего партнера JCG Биджу Кунджуммена в блоге all and sundry. |