הפעלת אתחול האביב עם PostgreSQL ב- Docker Compose

1. הקדמה

במדריך זה, אנו רוצים להריץ יישום Spring Boot עם מאגר המידע הפתוח הפופולרי PostgreSQL. במאמר קודם, בדקנו את Docker Compose כדי לטפל במספר מכולות בו זמנית. אז במקום להתקין את PostgreSQL כיישום נפרד, נשתמש ב- Docker Compose להפעלת Spring Boot ו- PostgreSQL.

2. יצירת פרויקט אתחול האביב

בואו נלך לאתחול האביב של אביב וליצור את פרויקט Spring Boot שלנו. נוסיף את מנהל התקן PostgreSQL ו אביב נתונים JPA מודולים. לאחר הורדת קובץ ה- ZIP שנוצר ונחלץ אותו לתיקיה, נוכל להריץ את היישום החדש שלנו:

./mvnw-boot-boot: לרוץ

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

*************************** הבקשה נכשלה בהתחלה ****************** ******** תיאור: הגדרת תצורת מקור הנתונים נכשלה: לא צוין מאפיין 'url' ולא ניתן היה להגדיר שום מקור נתונים משובץ. סיבה: נכשל בקביעת מחלקת נהגים מתאימה 

3. Dockerfile

לפני שנוכל להתחיל את PostgreSQL עם Docker Compose, עלינו להפוך את יישום Spring Boot שלנו לתמונת Docker. השלב הראשון הוא לארוז את היישום כקובץ JAR:

./mvnw חבילה נקייה -DskipTests

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

כעת יש לנו קובץ JAR של היישום יַעַד מַדרִיך. לקובץ זה שם הפרויקט ומספר הגרסה בשמו ומסתיים ב- -SNAPSHOT.jar. אז שמו יכול להיות docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar.

בואו נעשה את החדש src / main / docker מַדרִיך. לאחר מכן אנו מעתיקים לשם את קובץ ה- JAR של היישום:

יעד cp / docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar src / main / docker

לבסוף, אנו יוצרים זאת קובץ Docker באותה ספרייה:

FROM adoptopenjdk: 11-jre-hotspot ARG JAR_FILE = *. Jar COPY $ {JAR_FILE} application.jar ENTRYPOINT ["java", "-jar", "application.jar"]

קובץ זה מתאר כיצד Docker צריך להריץ את היישום Spring Boot שלנו. היא משתמשת ב- Java 11 מ- AdoptOpenJDK ומעתיקה את קובץ ה- JAR של היישום application.jar. לאחר מכן הוא מריץ את קובץ ה- JAR כדי להפעיל את יישום Spring Boot.

4. קובץ כתיבת דוקר

עכשיו בואו נכתוב את קובץ ה- Docker Compose שלנו, docker-compose.ymlושמור אותו src / main / docker:

גרסה: '2' שירותים: אפליקציה: תמונה: 'docker-spring-boot-postgres: האחרונה' build: context:. container_name: אפליקציה תלויה_על: - סביבת db: - SPRING_DATASOURCE_URL = jdbc: postgresql: // db: 5432 / compose-postgres - SPRING_DATASOURCE_USERNAME = compose-postgres - SPRING_DATASOURCE_PASSWORD = compose-postgres_DATE_DATA: SPRING_DATASOURCE_PASSWORD = compose-postgres_DATA_DATA: אלפיני 'container_name: סביבת db: - POSTGRES_USER = compose-postgres - POSTGRES_PASSWORD = compose-postgres

שם היישום שלנו הוא אפליקציה. זה הראשון משני השירותים (שורות 4-15):

  • לתמונת Spring Boot Docker יש את השם docker-spring-boot-postgres: האחרון (שורה 5). דוקר בונה את התמונה מה- קובץ Docker בספריה הנוכחית (שורות 6-7)
  • שם המיכל הוא אפליקציה (שורה 8). זה תלוי ב db שירות (קו 10). לכן זה מתחיל אחרי db מְכוֹלָה
  • היישום שלנו משתמש ב- db מיכל PostgreSQL כמקור הנתונים (שורה 12). שם מסד הנתונים, שם המשתמש והסיסמה הם כולם לחבר-פוסטגרס (שורות 12-14)
  • Hibernate ייצור או יעדכן אוטומטית את כל טבלאות מסד הנתונים הדרושות (שורה 15)

למסד הנתונים PostgreSQL יש את השם db והוא השירות השני (שורות 17-22):

  • אנו משתמשים ב- PostgreSQL 13.1 (שורה 18)
  • שם המיכל הוא db (שורה 19)
  • שם המשתמש והסיסמה הם שניהם לחבר-פוסטגרס (שורות 21-22)

5. ריצה עם Docker Compose

בואו נפעיל את יישום ה- Boot Boot שלנו ואת PostgreSQL עם Docker Compose:

דוקר-להלחין

ראשית, זה יבנה את תמונת Docker ליישום Spring Boot שלנו. לאחר מכן, הוא יפעיל מיכל PostgreSQL. לבסוף, היא תשיק את תמונת ה- Docker של היישום שלנו. הפעם, היישום שלנו פועל בסדר:

החל DemoApplication v0.0.1-SNAPSHOT באמצעות Java 11.0.9 ב- f94e79a2c9fc עם PID 1 (/application.jar התחיל על ידי שורש ב /) [...] סיים מאגר הנתונים של Spring Data ב- 28 ms. נמצא 0 ממשקי מאגר JPA. [...] החל DemoApplication תוך 4.751 שניות (JVM פועל במשך 6.512)

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

אם אנו רוצים לעצור את כל המכולות, עלינו ללחוץ תחילה על [Ctrl-C]. אז נוכל להפסיק את Docker Compose:

docker-compose למטה

6. יצירת ישות ומאגר לקוחות

כדי להשתמש במסד הנתונים PostgreSQL ביישום שלנו, ניצור ישות לקוחות פשוטה:

@Entity @Table (שם = "לקוח") לקוח ציבורי {@Id @GeneratedValue מזהה פרטי ארוך; @Column (name = "first_name", nullable = false) מחרוזת פרטית שם פרטי; @Column (name = "last_name", nullable = false) שם משפחה פרטי מחרוזת;

ה צרכן יש נוצר תְעוּדַת זֶהוּת תכונה ושתי תכונות חובה: שם פרטי ו שם משפחה.

עַכשָׁיו, אנו יכולים לכתוב את ממשק המאגר עבור ישות זו:

ממשק ציבורי CustomerRepository מרחיב את JpaRepository {}

פשוט על ידי הרחבה מאגר Jpa, אנו יורשים שיטות ליצירה ושאילתות שלנו צרכן יֵשׁוּת.

לבסוף נשתמש בשיטות אלה ביישום שלנו:

@SpringBootApplication מחלקה ציבורית DemoApplication {@ מאגר פרטי CustomerRepository פרטי; @EventListener (ApplicationReadyEvent.class) חלל ציבורי runAfterStartup () {List allCustomers = this.repository.findAll (); logger.info ("מספר הלקוחות:" + allCustomers.size ()); לקוח newCustomer = לקוח חדש (); newCustomer.setFirstName ("ג'ון"); newCustomer.setLastName ("איילה"); logger.info ("שמירת לקוח חדש ..."); this.repository.save (newCustomer); allCustomers = this.repository.findAll (); logger.info ("מספר הלקוחות:" + allCustomers.size ()); }}
  • אנו ניגשים ל צרכן מאגר באמצעות הזרקת תלות
  • אנו מבצעים שאילתות על מספר הלקוחות הקיימים במאגר - זה יהיה אפס
  • ואז אנו יוצרים ושומרים לקוח
  • כאשר נשאול שוב את הלקוחות הקיימים, אנו מצפים למצוא את הלקוח שיצרנו זה עתה

7. ריצה עם Docker Compose Again

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

./mvnw חבילה נקייה -DskipTests cp target / docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar src / main / docker

כיצד נבנה מחדש את תמונת ה- Docker עם קובץ JAR מעודכן זה? הדרך הטובה ביותר היא להסיר את תמונת ה- Docker הקיימת שאת שמה ציינו ב- docker-compose.yml. זה מאלץ את דוקר לבנות את התמונה בפעם הבאה שנתחיל את קובץ ה- Docker Compose:

cd src / main / docker-docker-compose למטה docker rmi docker-spring-boot-postgres: האחרונה של docker-compose up

אז לאחר הפסקת המכולות שלנו, אנו מוחקים את תמונת Docker של היישום. לאחר מכן אנו מתחילים שוב את קובץ ה- Docker Compose, הבונה מחדש את תמונת היישום.

הנה פלט היישום:

סריקת מאגר הנתונים של אביב הסתיימה ב- 180 ms. נמצא 1 ממשקי מאגר JPA. [...] מספר לקוחות: 0 שמירת לקוח חדש ... מספר לקוחות: 1

Spring Boot מוצא את מאגר הלקוחות הריק שלנו. לכן, אנחנו מתחילים בלי לקוח ואז יוצרים אותו בהצלחה.

8. מסקנה

במדריך קצר זה, התחלנו ביצירת יישום Spring Boot עבור PostgreSQL. לאחר מכן, כתבנו קובץ Docker Compose להפעלת מיכל היישומים שלנו עם מיכל PostgreSQL.

לבסוף, יצרנו ישות ומאגר לקוחות, שאפשרו לנו לשמור לקוח ב- PostgreSQL.

כרגיל, ניתן למצוא את קוד המקור של הדרכה זו באתר GitHub.


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