Если вы хотите начать использовать базу данных 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. |