Bevezetés a Spring Data Cassandra-ba

1. Áttekintés

Ez a cikk gyakorlati bevezetés a Cassandrával a Spring Data-val való együttműködéshez.

Kezdjük az alapoktól, áttekintjük a konfigurációkat és a kódolást, végül egy teljes Spring Data Cassandra modult építünk fel.

2. Maven-függőségek

Kezdjük azzal, hogy meghatározzuk a függőségeket a pom.xml, Maven-nel:

 com.datastax.cassandra cassandra-driver-core 2.1.9 

3. Konfiguráció a Cassandra számára

A Cassandra integráció konfigurálásához egész egészében a Java konfigurációs stílust fogjuk használni.

3.1. A fő konfiguráció

Kezdjük a fő konfigurációs osztállyal - természetesen az osztály szintjén keresztül @ Konfiguráció kommentár:

A @Configuration nyilvános osztály, a CassandraConfig kiterjeszti az AbstractCassandraConfiguration {@Orride védett karakterláncot getKeyspaceName () {return "testKeySpace"; } @Bean public CassandraClusterFactoryBean fürt () {CassandraClusterFactoryBean cluster = új CassandraClusterFactoryBean (); cluster.setContactPoints ("127.0.0.1"); cluster.setPort (9142); visszatérő klaszter; } @Bean public CassandraMappingContext cassandraMapping () dobja a ClassNotFoundException {return new BasicCassandraMappingContext (); }}

Figyelje meg az új babot - BasicCassandraMappingContext - alapértelmezett megvalósítással. Erre szükség van a perzisztens entitások feltérképezéséhez az objektumuk és a perzisztens formátumuk között.

És mivel az alapértelmezett megvalósítás eléggé képes, közvetlenül felhasználhatjuk.

3.2. Cassandra kapcsolat tulajdonságai

Három kötelező beállítást kell konfigurálnunk a kapcsolat beállításához egy Cassandra kliens számára.

Be kell állítanunk azt a hosztnevet, amelyet a Cassandra szerver fut contactPoints. Kikötő egyszerűen figyeli a kiszolgálón lévő kérést. KeyspaceName az a névtér, amely meghatározza az adatreplikációt a csomópontokon, amely egy Cassandra-alapú koncepción alapul.

4. A Cassandra adattár

Használjuk a CassandraRaktár az adatelérési réteghez. Ez a Spring Data repository absztrakciót követi, amely arra összpontosít, hogy kivonja az adatelérési rétegek különböző perzisztencia mechanizmusok közötti megvalósításához szükséges kódot.

4.1. Hozza létre a CassandraRaktár

Hozzuk létre a CassandraRaktár a konfigurációban használandó:

@Repository nyilvános felület A BookRepository kiterjeszti a CassandraRepository {//}

4.2. Konfiguráció a CassandraRaktár

Most kibővíthetjük a konfigurációt a 3.1 szakaszban, kiegészítve @EnableCassandraRepositories osztály szintű kommentár a Cassandra Tárház 4.1 CassandraConfig:

@Configuration @EnableCassandraRepositories (basePackages = "com.baeldung.spring.data.cassandra.repository") public class CassandraConfig kiterjeszti az AbstractCassandraConfiguration {//}

5. Az entitás

Vessünk egy gyors pillantást az entitásra - a modellosztályra, amelyet használni fogunk. Az osztály jegyzetekkel rendelkezik, és további paramétereket határoz meg a Cassandra adattáblák metaadatok létrehozásához beágyazott módban.

Használata @Asztal annotáció, a bab közvetlenül hozzárendelve egy Cassandra adattáblához. Az egyes tulajdonságokat elsődleges kulcsként vagy egyszerű oszlopként is definiálják:

@Table public class Book {@PrimaryKeyColumn (name = "isbn", sorszám = 2, type = PrimaryKeyType.CLUSTERED, ordering = Ordering.DESCENDING) privát UUID azonosító; @PrimaryKeyColumn (név = "title", sorszám = 0, type = PrimaryKeyType.PARTITIONED) privát karakterlánc címe; @PrimaryKeyColumn (név = "kiadó", sorszám = 1, típus = PrimaryKeyType.PARTITIONED) privát karakterlánc-kiadó; @Column private Set tags = new HashSet (); // szabványos mérőeszközök és beállítók}

6. Tesztelés beágyazott szerverrel

6.1. Maven-függőségek

Ha beágyazott módban szeretné futtatni a Cassandrát (külön Cassandra szerver manuális telepítése nélkül), hozzá kell adnia a cassandra-egység kapcsolatos függőségek a pom.xml:

 org.cassandraunit cassandra-unit-spring 2.1.9.2 teszt org.cassandraunit cassandra-unit org.cassandraunit cassandra-unit-shaded 2.1.9.2 test 

Lehetséges használjon beágyazott Cassandra szervert az alkalmazás teszteléséhez. A fő előny az, hogy nem akarja kifejezetten telepíteni a Cassandrát.

Ez a beágyazott szerver kompatibilis a tavaszi JUnit tesztekkel is. Itt beállíthatjuk SpringJUnit4ClassRunner felhasználásával @RunWith annotáció a beágyazott szerverrel együtt. Tehát egy teljes tesztcsomag megvalósítható anélkül, hogy külső Cassandra szolgáltatás futna.

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (class = CassandraConfig.class) public class BookRepositoryIntegrationTest {//}

6.2. A szerver indítása és leállítása

Ezt a szakaszt figyelmen kívül hagyhatja, ha külső Cassandra szervert futtat.

Egyszer el kell indítanunk a szervert az egész tesztkészlethez, ezért a szerver indítási módját a jelöli @Óra előtt kommentár:

@BeforeClass public static void startCassandraEmbedded () {EmbeddedCassandraServerHelper.startEmbeddedCassandra (); Fürt fürt = Cluster.builder () .addContactPoints ("127.0.0.1"). WithPort (9142) .build (); Munkamenet = cluster.connect (); }

Ezután meg kell győződnünk arról, hogy a szerver le van állítva a tesztkészlet végrehajtásának befejezése után:

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

6.3. Tiszta adattábla

Jó gyakorlat eldobni és létrehozni az adattáblázatot minden teszt végrehajtása előtt, hogy elkerüljük a váratlan eredményeket a korábbi tesztvégrehajtások során manipulált adatok miatt.

Most a szerver indításakor létrehozhatjuk az adattáblát:

@A nyilvános void előtt createTable () {adminTemplate.createTable (true, CqlIdentifier.cqlId (DATA_TABLE_NAME), Book.class, new HashMap ()); }

és dobja le minden egyes teszteset végrehajtása után:

@A nyilvános void dropTable () után {adminTemplate.dropTable (CqlIdentifier.cqlId (DATA_TABLE_NAME)); }

7. Adathozzáférés használata CassandraRaktár

Közvetlenül használhatjuk a BookRepository a fentiekben hoztuk létre, hogy a Cassandra adatbázisban tároljuk, kezeljük és lehívjuk az adatokat.

7.1. Új könyv mentése

Új könyvet elmenthetünk könyvesboltunkba:

Book javaBook = new Book (UUIDs.timeBased (), "Head First Java", "O'Reilly Media", ImmutableSet.of ("Számítógép", "Szoftver"); bookRepository.save (ImmutableSet.of (javaBook));

Ezután ellenőrizhetjük a beillesztett könyv elérhetőségét az adatbázisban:

Iterálható könyvek = bookRepository.findByTitleAndPublisher ("Head First Java", "O'Reilly Media"); assertEquals (javaBook.getId (), books.iterator (). next (). getId ());

7.2. Frissítsen egy meglévő könyvet

Lat egy új könyv beillesztésével kezdi:

Könyv javaBook = új könyv (UUIDs.timeBased (), "Head First Java", "O'Reilly Media", ImmutableSet.of ("Computer", "Software"); bookRepository.save (ImmutableSet.of (javaBook));

Hívjuk a könyvet a címe szerint:

Iterálható könyvek = bookRepository.findByTitleAndPublisher ("Head First Java", "O'Reilly Media");

Akkor változtassuk meg a könyv címét:

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

Végül ellenőrizzük, hogy a cím frissült-e az adatbázisban:

Iterálható könyvek = bookRepository.findByTitleAndPublisher ("Head First Java Second Edition", "O'Reilly Media"); assertEquals (javaBook.getTitle (), updateBooks.iterator (). next (). getTitle ());

7.3. Törölje a Meglévő könyvet

Helyezzen be egy új könyvet:

Könyv javaBook = új könyv (UUIDs.timeBased (), "Head First Java", "O'Reilly Media", ImmutableSet.of ("Computer", "Software"); bookRepository.save (ImmutableSet.of (javaBook));

Ezután törölje az újonnan beírt könyvet:

bookRepository.delete (javaBook); 

Most ellenőrizhetjük a törlést:

Iterálható könyvek = bookRepository.findByTitleAndPublisher ("Head First Java", "O'Reilly Media"); assertNotEquals (javaBook.getId (), books.iterator (). next (). getId ());

Ez a NoSuchElementException kivételt eredményezi a kódból, biztosítva a könyv törlését.

7.4. Keresse meg az összes könyvet

Helyezzen be először egy új könyvet:

Könyv javaBook = új könyv (UUIDs.timeBased (), "Head First Java", "O'Reilly Media", ImmutableSet.of ("Computer", "Software"); Book dPatternBook = new Book (UUIDs.timeBased (), "Head Design Patterns", "O'Reilly Media", ImmutableSet.of ("Computer", "Software"); bookRepository.save (ImmutableSet.of (javaBook)); bookRepository.save (ImmutableSet.of (dPatternBook));

Találd meg az összes könyvet:

Iterálható könyvek = bookRepository.findAll ();

Ezután ellenőrizhetjük a rendelkezésre álló könyvek számát az adatbázisban:

int bookCount = 0; for (Könyvkönyv: könyvek) bookCount ++; assertEquals (bookCount, 2);

8. Következtetés

A Cassandra alapvető gyakorlati bemutatását végeztük el Spring adatokkal, a leggyakoribb megközelítést alkalmazva CassandraRaktár adatelérési mechanizmus.

A fenti kódrészletek és példák megvalósítása megtalálható a GitHub projektemben - ez egy Eclipse alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.