מבוא לנתוני האביב קסנדרה

1. סקירה כללית

מאמר זה הוא מבוא מעשי לעבודה עם קסנדרה עם Spring Data.

נתחיל מהבסיס ונעבור את התצורות והקידוד, ולבסוף נבנה מודול שלם של נתוני Spring Data Cassandra.

2. תלות Maven

נתחיל בהגדרת התלות ב- pom.xml, עם מייבן:

 com.datastax.cassandra cassandra-driver-core 2.1.9 

3. תצורה עבור קסנדרה

נשתמש בסגנון התצורה של Java לאורך כל זה כדי להגדיר את שילוב קסנדרה.

3.1. התצורה העיקרית

נתחיל ממעמד התצורה הראשי - כמובן מונע דרך רמת הכיתה @תְצוּרָה ביאור:

@Configuration מחלקה ציבורית CassandraConfig מרחיב את AbstractCassandraConfiguration {@Override מוגן מחרוזת getKeyspaceName () {להחזיר "testKeySpace"; } @Bean צבר CassandraClusterFactory אשכול () {CassandraClusterFactoryBean אשכול = CassandraClusterFactoryBean חדש (); cluster.setContactPoints ("127.0.0.1"); cluster.setPort (9142); אשכול החזרה; } @Bean הציבור CassandraMappingContext cassandraMapping () זורק ClassNotFoundException {להחזיר BasicCassandraMappingContext חדש (); }}

שימו לב לשעועית החדשה - BasicCassandraMappingContext - עם יישום ברירת מחדל. זה נדרש כדי למפות את הישויות המתמשכות בין האובייקט שלהם לפורמטים המתמידים שלהם.

ומכיוון שיישום ברירת המחדל מסוגל מספיק, אנו יכולים להשתמש בו ישירות.

3.2. מאפייני חיבור קסנדרה

ישנן שלוש הגדרות חובה שעלינו להגדיר כדי להגדיר את החיבור עבור לקוח קסנדרה.

עלינו להגדיר את שם המארח ששרת קסנדרה פועל כ- contactPoints. נמל הוא פשוט יציאת ההאזנה לבקשה בשרת. KeyspaceName הוא מרחב השמות המגדיר את שכפול הנתונים בצמתים, המבוסס על תפיסה הקשורה לקאסנדרה.

4. מאגר קסנדרה

אנחנו הולכים להשתמש ב- מאגר קסנדרה לשכבת גישה לנתונים. זאת בעקבות הפשטת מאגר הנתונים של Spring Data, המתמקדת בהפשטת הקוד הנדרש ליישום שכבות הגישה לנתונים על פני מנגנוני התמדה שונים.

4.1. צור את מאגר קסנדרה

בואו ניצור את מאגר קסנדרה לשימוש בתצורה:

ממשק ציבורי @ מאגר @ BookRepository מאריך קסנדרה מאגר {//}

4.2. תצורה עבור מאגר קסנדרה

כעת נוכל להרחיב את התצורה בסעיף 3.1 ולהוסיף @EnableCassandraRepositories ביאור ברמת הכיתה לציון מאגר הקסנדרה שלנו שנוצר בסעיף 4.1 ב קסנדרה קונפיג:

@Configuration @EnableCassandraRepositories (basePackages = "com.baeldung.spring.data.cassandra.repository") מחלקה ציבורית CassandraConfig מרחיב את AbstractCassandraConfiguration {//}

5. הישות

בואו נסתכל במהירות על הישות - מחלקת המודל בה אנו הולכים להשתמש. המחלקה מסומנת ומגדירה פרמטרים נוספים ליצירת טבלת הנתונים של קסנדרה במטא נתונים במצב משובץ.

באמצעות @שולחן ביאור, השעועית ממופה ישירות לטבלת הנתונים של קסנדרה. כמו כן כל מאפיין מוגדר כסוג של מפתח ראשי או כעמודה פשוטה:

@Table class class ספר {@PrimaryKeyColumn (name = "isbn", ordinal = 2, type = PrimaryKeyType.CLUSTERED, ordering = Ordering.DESCENDING) מזהה UUID פרטי; @PrimaryKeyColumn (name = "title", ordinal = 0, type = PrimaryKeyType.PARTITIONED) כותרת מחרוזת פרטית; @PrimaryKeyColumn (name = "publisher", ordinal = 1, type = PrimaryKeyType.PARTITIONED) מפרסם מחרוזת פרטי; @Column Set תגיות פרטיות = HashSet חדש (); // סטרים וקובעים סטנדרטיים}

6. בדיקה עם שרת משובץ

6.1. תלות Maven

אם ברצונך להפעיל את קסנדרה במצב מוטמע (מבלי להתקין ידנית שרת קסנדרה נפרד), עליך להוסיף את ה- יחידת קסנדרה תלות קשורה ל 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 

זה אפשרי ש השתמש בשרת קסנדרה מוטבע כדי לבדוק יישום זה. היתרון העיקרי הוא שאתה לא רוצה להתקין את קסנדרה במפורש.

שרת מוטבע זה תואם גם לבדיקות Spring JUnit. כאן נוכל להגדיר SpringJUnit4ClassRunner באמצעות @לרוץ עם ביאור יחד עם השרת המשובץ. כך שאפשר ליישם חבילת בדיקות שלמה מבלי להפעיל שירות חיצוני של קסנדרה.

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = CassandraConfig.class) מחלקה ציבורית BookRepositoryIntegrationTest {//}

6.2. הפעלה ועצירה של השרת

אתה יכול להתעלם מקטע זה אם אתה מפעיל שרת קסנדרה חיצוני.

עלינו להפעיל את השרת פעם אחת לכל חבילת הבדיקה, כך ששיטת התחלת השרת מסומנת ב @לפני השיעור ביאור:

@BeforeClass ריק סטטי ציבורי startCassandraEmbedded () {EmbeddedCassandraServerHelper.startEmbeddedCassandra (); אשכול אשכול = Cluster.builder () .addContactPoints ("127.0.0.1"). WithPort (9142) .build (); מושב מושב = cluster.connect (); }

בשלב הבא עלינו לוודא שהשרת נעצר לאחר השלמת ביצוע חבילת הבדיקה:

@AfterClass פסל סטטי ציבורי stopCassandraEmbedded () {EmbeddedCassandraServerHelper.cleanEmbeddedCassandra (); }

6.3. טבלת נתונים נקיים

כדאי לזרוק וליצור את טבלת הנתונים לפני כל ביצוע בדיקות, כדי להימנע מתוצאות בלתי צפויות עקב נתונים מניפולטיביים בביצועי בדיקות קודמים.

כעת אנו יכולים ליצור את טבלת הנתונים עם הפעלת השרת:

@ לפני הריק הציבורי createTable () {adminTemplate.createTable (true, CqlIdentifier.cqlId (DATA_TABLE_NAME), Book.class, HashMap חדש ()); }

ושחרר אחרי כל ביצוע מקרה מקרה בודד:

@ לאחר חלל פומבי dropTable () {adminTemplate.dropTable (CqlIdentifier.cqlId (DATA_TABLE_NAME)); }

7. גישה לנתונים באמצעות מאגר קסנדרה

אנו יכולים להשתמש ישירות ב- מאגר ספרים יצרנו לעיל כדי להתמיד, לתפעל ולהביא את הנתונים בבסיס הנתונים של קסנדרה.

7.1. שמור ספר חדש

אנו יכולים לשמור ספר חדש בחנות הספרים שלנו:

ספר javaBook = ספר חדש (UUIDs.timeBased (), "ראש ג'אווה ראשוני", "אוריילי מדיה", ImmutableSet.of ("מחשב", "תוכנה")); bookRepository.save (ImmutableSet.of (javaBook));

אז נוכל לבדוק את זמינות הספר שהוכנס במסד הנתונים:

ספרים ניתנים לניצול = bookRepository.findByTitleAndPublisher ("ראש ג'אווה ראשונה", "אוריילי מדיה"); assertEquals (javaBook.getId (), books.iterator (). הבא (). getId ());

7.2. עדכן ספר קיים

התחלה של לאט בהכנסת ספר חדש:

ספר javaBook = ספר חדש (UUIDs.timeBased (), "ראש ג'אווה ראשוני", "אוריילי מדיה", ImmutableSet.of ("מחשב", "תוכנה")); bookRepository.save (ImmutableSet.of (javaBook));

בוא נביא את הספר בכותרת:

ספרים ניתנים לשינוי = bookRepository.findByTitleAndPublisher ("ראש ג'אווה ראשונה", "אוריילי מדיה");

אז בואו נשנה את כותרת הספר:

javaBook.setTitle ("ראש המהדורה השנייה של Java השנייה"); bookRepository.save (ImmutableSet.of (javaBook));

לבסוף נבדוק האם הכותרת מעודכנת במסד הנתונים:

ספרים ניתנים לשינוי = bookRepository.findByTitleAndPublisher ("ראש המהדורה השנייה של Java השנייה", "O'Reilly Media"); assertEquals (javaBook.getTitle (), updateBooks.iterator (). הבא (). getTitle ());

7.3. מחק את הספר הקיים

הכנס ספר חדש:

ספר javaBook = ספר חדש (UUIDs.timeBased (), "ראש ג'אווה ראשוני", "אוריילי מדיה", ImmutableSet.of ("מחשב", "תוכנה")); bookRepository.save (ImmutableSet.of (javaBook));

ואז מחק את הספר שהזנת לאחרונה:

bookRepository.delete (javaBook); 

עכשיו נוכל לבדוק אם המחיקה:

ספרים ניתנים לשינוי = bookRepository.findByTitleAndPublisher ("ראש ג'אווה ראשונה", "אוריילי מדיה"); assertNotEquals (javaBook.getId (), books.iterator (). הבא (). getId ());

זה יגרום לזריק NoSuchElementException מהקוד ולוודא שהספר נמחק.

7.4. מצא את כל הספרים

הכנס ספרים חדשים תחילה:

ספר javaBook = ספר חדש (UUIDs.timeBased (), "ראש Java הראשון", "O'Reilly Media", ImmutableSet.of ("מחשב", "תוכנה")); ספר dPatternBook = ספר חדש (UUIDs.timeBased (), "דפוסי עיצוב ראש", "אוריילי מדיה", ImmutableSet.of ("מחשב", "תוכנה")); bookRepository.save (ImmutableSet.of (javaBook)); bookRepository.save (ImmutableSet.of (dPatternBook));

מצא את כל הספרים:

ספרים ניתנים לשינוי = bookRepository.findAll ();

ואז נוכל לבדוק את מספר הספרים הזמינים במסד הנתונים:

int bookCount = 0; עבור (ספר ספר: ספרים) bookCount ++; assertEquals (bookCount, 2);

8. מסקנה

עברנו מבוא מעשי בסיסי לקסנדרה עם נתוני אביב תוך שימוש בגישה הנפוצה ביותר מאגר קסנדרה מנגנון גישה לנתונים.

היישום של קטעי הקוד והדוגמאות הנ"ל ניתן למצוא בפרויקט GitHub שלי - זהו פרויקט מבוסס Eclipse, כך שיהיה קל לייבא ולהפעיל אותו כפי שהוא.


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