Úvod do jarných dát Cassandra

1. Prehľad

Tento článok je praktickým úvodom do práce s Cassandrou v aplikácii Spring Data.

Začneme od základov, prejdeme konfiguráciami a programovaním a nakoniec zostavíme kompletný modul Spring Data Cassandra.

2. Maven závislosti

Začnime definovaním závislostí v pom.xml, s Mavenom:

 com.datastax.cassandra cassandra-driver-core 2.1.9 

3. Konfigurácia pre Cassandru

V tomto celku použijeme štýl konfigurácie Java, aby sme nakonfigurovali integráciu Cassandry.

3.1. Hlavná konfigurácia

Začnime s hlavnou konfiguračnou triedou - samozrejme poháňanou cez úroveň triedy @ Konfigurácia anotácia:

@Configuration verejná trieda CassandraConfig rozširuje AbstractCassandraConfiguration {@Override chránený reťazec getKeyspaceName () {return "testKeySpace"; } @Bean public CassandraClusterFactoryBean cluster () {CassandraClusterFactoryBean cluster = nový CassandraClusterFactoryBean (); cluster.setContactPoints ("127.0.0.1"); cluster.setPort (9142); spätný klaster; } @Bean public CassandraMappingContext cassandraMapping () hodí ClassNotFoundException {return new BasicCassandraMappingContext (); }}

Všimnite si novú fazuľu - BasicCassandraMappingContext - s predvolenou implementáciou. Toto je potrebné na mapovanie trvalých entít medzi ich objektom a ich trvalými formátmi.

A keďže je predvolená implementácia dostatočne schopná, môžeme ju použiť priamo.

3.2. Vlastnosti pripojenia Cassandra

Existujú tri povinné nastavenia, ktoré musíme nakonfigurovať, aby sme nastavili pripojenie pre klienta Cassandra.

Musíme nastaviť názov hostiteľa, na ktorom je server Cassandra spustený ako contactPoints. Prístav je jednoducho načúvací port pre požiadavku na serveri. KeyspaceName je menný priestor, ktorý definuje replikáciu údajov na uzloch, ktorý je založený na koncepcii spojenej s Cassandrou.

4. Repozitár Cassandra

Použijeme a Úložisko Cassandra pre vrstvu prístupu k dátam. Toto nadväzuje na abstrakciu Spring Data repository, ktorá je zameraná na abstrahovanie kódu potrebného na implementáciu vrstiev prístupu k dátam naprieč rôznymi mechanizmami perzistencie.

4.1. Vytvorte Úložisko Cassandra

Poďme vytvoriť Úložisko Cassandra ktoré sa majú použiť v konfigurácii:

@Repository verejné rozhranie BookRepository rozširuje CassandraRepository {//}

4.2. Konfigurácia pre Úložisko Cassandra

Teraz môžeme rozšíriť konfiguráciu v časti 3.1 a pridať ju @EnableCassandraRepositories anotáciu na úrovni triedy, aby sme označili naše úložisko Cassandra vytvorené v časti 4.1 v CassandraConfig:

@Configuration @EnableCassandraRepositories (basePackages = "com.baeldung.spring.data.cassandra.repository") verejná trieda CassandraConfig rozširuje AbstractCassandraConfiguration {//}

5. Subjekt

Poďme sa rýchlo pozrieť na entitu - triedu modelov, ktorú budeme používať. Trieda je anotovaná a definuje ďalšie parametre pre vytvorenie metaúdajov vytvorenia dátovej tabuľky Cassandra vo vloženom režime.

Použitím @ Tabuľka anotácia, fazuľa je priamo mapovaná do dátovej tabuľky Cassandra. Každá vlastnosť je tiež definovaná ako typ primárneho kľúča alebo jednoduchý stĺpec:

@ Tabuľka verejnej triedy Book {@PrimaryKeyColumn (name = "isbn", ordinal = 2, type = PrimaryKeyType.CLUSTERED, ordering = Ordering.DESCENDING) private UUID id; @PrimaryKeyColumn (name = "title", ordinal = 0, type = PrimaryKeyType.PARTITIONED) private String title; @PrimaryKeyColumn (name = "publisher", ordinal = 1, type = PrimaryKeyType.PARTITIONED) súkromný vydavateľ reťazcov; @Sloupec súkromné ​​značky značiek = nový HashSet (); // štandardné getre a setre}

6. Testovanie na zabudovanom serveri

6.1. Maven závislosti

Ak chcete spustiť Cassandru v zabudovanom režime (bez manuálnej inštalácie samostatného servera Cassandra), musíte pridať jednotka Cassandra súvisiace závislosti od pom.xml:

 org.cassandraunit cassandra-unit-spring 2.1.9.2 test org.cassandraunit cassandra-unit org.cassandraunit cassandra-unit-shaded 2.1.9.2 test org.hectorclient hector-core 2.0-0 

Je možné na testovanie tejto aplikácie použite zabudovaný server Cassandra. Hlavnou výhodou je, že nechcete explicitne inštalovať Cassandru.

Tento zabudovaný server je kompatibilný aj s testami Spring JUnit. Tu môžeme nastaviť SpringJUnit4ClassRunner použitím @RunWith anotácie spolu so zabudovaným serverom. Je teda možné implementovať kompletnú testovaciu sadu bez toho, aby bola spustená externá služba Cassandra.

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = CassandraConfig.class) verejná trieda BookRepositoryIntegrationTest {//}

6.2. Spustenie a zastavenie servera

Túto časť môžete ignorovať, ak máte spustený externý server Cassandra.

Server musíme spustiť raz pre celú testovaciu sadu, takže metóda spustenia servera je označená symbolom @BeforeClass anotácia:

@BeforeClass public static void startCassandraEmbedded () {EmbeddedCassandraServerHelper.startEmbeddedCassandra (); Klastrový klaster = Cluster.builder () .addContactPoints ("127.0.0.1"). WithPort (9142) .build (); Relácia relácie = cluster.connect (); }

Ďalej sa musíme ubezpečiť, že server je zastavený po dokončení vykonávania testovacej sady:

@AfterClass public static void stopCassandraEmbedded () {EmbeddedCassandraServerHelper.cleanEmbeddedCassandra (); }

6.3. Tabuľka čistých údajov

Je dobrým zvykom vypustiť a vytvoriť dátovú tabuľku pred každým vykonaním testu, aby sa predišlo neočakávaným výsledkom v dôsledku manipulovaných dát v predchádzajúcich vykonaniach testu.

Teraz môžeme vytvoriť tabuľku údajov pri spustení servera:

@Before public void createTable () {adminTemplate.createTable (true, CqlIdentifier.cqlId (DATA_TABLE_NAME), Book.class, new HashMap ()); }

a vypadnúť po každom vykonaní každého testovacieho prípadu:

@After public void dropTable () {adminTemplate.dropTable (CqlIdentifier.cqlId (DATA_TABLE_NAME)); }

7. Prístup k údajom pomocou Úložisko Cassandra

Môžeme priamo použiť BookRepository vyššie sme vytvorili, aby sme pretrvali, manipulovali a načítali údaje v databáze Cassandra.

7.1. Uložiť novú knihu

Do nášho kníhkupectva môžeme uložiť novú knihu:

Kniha javaBook = nová kniha (UUIDs.timeBased (), "Head First Java", "O'Reilly Media", ImmutableSet.of ("počítač", "softvér")); bookRepository.save (ImmutableSet.of (javaBook));

Potom môžeme skontrolovať dostupnosť vloženej knihy v databáze:

Iterovateľné knihy = bookRepository.findByTitleAndPublisher ("Head First Java", "O'Reilly Media"); assertEquals (javaBook.getId (), books.iterator (). next (). getId ());

7.2. Aktualizujte existujúcu knihu

Lat začína vložením novej knihy:

Kniha javaBook = nová kniha (UUIDs.timeBased (), "Head First Java", "O'Reilly Media", ImmutableSet.of ("počítač", "softvér")); bookRepository.save (ImmutableSet.of (javaBook));

Načítajme knihu podľa názvu:

Iterovateľné knihy = bookRepository.findByTitleAndPublisher ("Head First Java", "O'Reilly Media");

Potom zmeňme názov knihy:

javaBook.setTitle ("Head First Java Second Edition"); bookRepository.save (ImmutableSet.of (javaBook));

Nakoniec skontrolujeme, či je názov aktualizovaný v databáze:

Iterable books = bookRepository.findByTitleAndPublisher ("Head First Java Second Edition", "O'Reilly Media"); assertEquals (javaBook.getTitle (), updateBooks.iterator (). next (). getTitle ());

7.3. Odstrániť existujúcu knihu

Vložte novú knihu:

Kniha javaBook = nová kniha (UUIDs.timeBased (), "Head First Java", "O'Reilly Media", ImmutableSet.of ("počítač", "softvér")); bookRepository.save (ImmutableSet.of (javaBook));

Potom odstráňte novo zadanú knihu:

bookRepository.delete (javaBook); 

Teraz môžeme skontrolovať odstránenie:

Iterovateľné knihy = bookRepository.findByTitleAndPublisher ("Head First Java", "O'Reilly Media"); assertNotEquals (javaBook.getId (), books.iterator (). next (). getId ());

To spôsobí vyhodenie NoSuchElementException z kódu, ktorý zabezpečí odstránenie knihy.

7.4. Nájsť všetky knihy

Najskôr vložte nové knihy:

Kniha javaBook = nová kniha (UUIDs.timeBased (), "Head First Java", "O'Reilly Media", ImmutableSet.of ("počítač", "softvér")); Kniha dPatternBook = nová kniha (UUIDs.timeBased (), "vzory návrhu hlavy", "O'Reilly Media", ImmutableSet.of ("počítač", "softvér")); bookRepository.save (ImmutableSet.of (javaBook)); bookRepository.save (ImmutableSet.of (dPatternBook));

Nájsť všetky knihy:

Iterovateľné knihy = bookRepository.findAll ();

Potom môžeme skontrolovať počet dostupných kníh v databáze:

int bookCount = 0; pre (Kniha kníh: knihy) bookCount ++; assertEquals (bookCount, 2);

8. Záver

Prešli sme základným praktickým úvodom do dát Cassandry s jarnými údajmi pomocou najbežnejšieho použitého prístupu Úložisko Cassandra mechanizmus prístupu k údajom.

Implementáciu vyššie uvedených úryvkov kódu a príkladov nájdete v mojom projekte GitHub - jedná sa o projekt založený na Eclipse, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


$config[zx-auto] not found$config[zx-overlay] not found