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.