JavaRush /จาวาบล็อก /Random-TH /SpringBoot + Flyway - "โครงการ Java จาก A ถึง Z"
Roman Beekeeper
ระดับ

SpringBoot + Flyway - "โครงการ Java จาก A ถึง Z"

เผยแพร่ในกลุ่ม
บทความจากซีรีส์เกี่ยวกับการสร้างโปรเจ็กต์ Java (ลิงก์ไปยังเนื้อหาอื่นอยู่ท้ายสุด) เป้าหมายคือการวิเคราะห์เทคโนโลยีที่สำคัญ ผลลัพธ์คือการเขียนบอทโทรเลข ในส่วนนี้เราจะลองเปิดตัว SpringBoot และ Flyway จำนวนทฤษฎีขั้นต่ำตามที่คุณต้องการ))) เราละเว้นการเปรียบเทียบขั้นสุดท้ายของ Flyway/Liquibase เป็นระยะเวลาไม่มีกำหนดและไปยังจุดนั้น และถึงอย่างนั้นมันก็ลากต่อไปแล้ว เพื่อไม่ให้อธิบาย Flyway ซ้ำสองครั้ง ฉันจึงตัดสินใจเพิ่มสิ่งนี้ลงในโครงการ JRTB ในอนาคตของเราทันที"โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 1

เราต้องทำอะไรเพื่อเป็นส่วนหนึ่งของสิ่งนี้?

  1. เปิดแอปพลิเคชัน SpringBoot โดยใช้ Maven
  2. เพิ่ม Flyway เข้าไปที่นั่น: โชคดีที่สามารถรวมเข้าด้วยกันได้อย่างง่ายดาย
  3. เพิ่มสคีมาสำหรับตารางที่เรามีในฐานข้อมูลตัวอย่าง
ด้วยวิธีนี้เราจะได้เรียนรู้วิธีการทำงานกับ Flyway เหตุใดจึงต้องแยกโครงการและไม่เข้าสู่ JRTB ของเราทันที เพราะต่อมาใครอยากทำความเข้าใจว่าต้องทำอย่างไรก็จะมีโปรเจ็กต์พร้อมตัวอย่างและบทความอธิบายการทำงานด้วย ไปกันเลย!

ฟลายเวย์คืออะไร

หากต้องการใช้สิ่งใดสิ่งหนึ่ง คุณต้องเข้าใจก่อนว่ามันคืออะไรและเพราะเหตุใด Flywayเป็นเครื่องมือควบคุมเวอร์ชันฐานข้อมูล คำศัพท์ก็รู้ดีแต่ยังไม่เสริมความเข้าใจใช่ไหม? เรามาลองอธิบายปัญหาที่ทางบินแก้ไขกันดีกว่า สมมุติว่าเรามีโครงการ เช่นเดียวกับทุกสิ่งในโลกของเรา มันไม่สมบูรณ์แบบ ดังนั้นจึงไม่สามารถวางแผนและร่างเวอร์ชันสุดท้ายของโครงการได้ ทุกครั้งที่มีความแตกต่างบางอย่างที่ไม่ทราบสาเหตุปรากฏขึ้น โครงการใช้ฐานข้อมูลในการทำงาน แน่นอนว่าหากโครงการเปลี่ยนแปลง โครงสร้างฐานข้อมูลก็อาจเปลี่ยนแปลงไปด้วย สมมติว่าเราเพิ่มฟิลด์ใหม่สำหรับหนึ่งในเอนทิตีในโครงการของเรา ทำอย่างไร?
  1. เพิ่มฟิลด์นี้ให้กับเอนทิตีของเรา อัปเดตทุกอย่างเพื่อให้ตรรกะทางธุรกิจทำงานได้
  2. อัพเดตฐานข้อมูล วิธีเดียวที่เป็นไปได้คือทำด้วยตนเอง ในการดำเนินการนี้ คุณจะต้องเข้าไปลงทะเบียนสคริปต์ sql ที่จำเป็น
ประเด็นที่สองทำให้เกิดคำถามมากมาย:
  1. แต่หากเรามีสถานที่มากกว่าหนึ่งแห่งที่เราปรับใช้โปรเจ็กต์ของเรา จำเป็นต้องดำเนินการนี้ในแต่ละแห่งหรือไม่?
  2. และหากเราอยากย้อนกลับไป เราจะรู้ได้อย่างไรว่าตอนนี้โครงสร้างฐานข้อมูลอยู่ในสถานะไหน?
  3. เราจะแน่ใจได้อย่างไรว่าการเปลี่ยนแปลงฐานข้อมูลสำเร็จ?
  4. ฉันจะได้รับโอกาสในการติดตามการเปลี่ยนแปลงฐานข้อมูลทั้งหมดที่เกิดขึ้นในโครงการได้อย่างไร
หากคุณดำเนินการด้วยตนเอง คำตอบจะไม่ดีที่สุด... เพื่อหลีกเลี่ยงปัญหาเหล่านี้ คุณสามารถใช้เครื่องมือย้ายฐานข้อมูล หนึ่งในนั้นคือฟลายเวย์ เขาทำงานอะไร? ในฐานะส่วนหนึ่งของโปรเจ็กต์ เราจัดเก็บไฟล์ sql แยกกัน (ที่เรียกว่าการย้ายข้อมูล) ซึ่งจัดเก็บทุกสิ่งที่เราทำกับฐานข้อมูลในคราวเดียว การย้ายทั้งหมดเกิดขึ้นอย่างเคร่งครัดในลำดับที่แน่นอน ซึ่งช่วยให้คุณสามารถติดตามการเปลี่ยนแปลงในโครงสร้างและข้อมูลของฐานข้อมูล (บ่อยครั้งโดยใช้การย้าย ข้อมูลทดสอบจะถูกเพิ่มลงในโปรเจ็กต์ ดังนั้นเมื่อมีการปรับใช้กับเซิร์ฟเวอร์บางตัว จะมีบางส่วนอยู่แล้ว ค่าที่คุณสามารถทดสอบโครงการได้) หลังจากผ่านการทดสอบแล้ว ระบบจะเริ่มการย้ายข้อมูลเมื่อมีการสร้างโปรเจ็กต์ พวกเขาเชื่อมต่อกับฐานข้อมูลและดำเนินการย้ายข้อมูล หากการย้ายข้อมูลได้ดำเนินการไปแล้วในฐานข้อมูลนี้ ทาง flyway ก็จะข้ามไป (โดยจะจัดเก็บข้อมูลเกี่ยวกับการโยกย้ายและสถานะไว้ในตารางแยกต่างหากในฐานข้อมูล ซึ่งช่วยในการจัดการ) และหากการโยกย้ายบางอย่างไม่ประสบผลสำเร็จ โครงการก็จะเป็นไป build และการติดตั้ง (ปรับใช้) ไปยังเซิร์ฟเวอร์จะหยุดลง ฉันพยายามอธิบายให้ละเอียดที่สุดเท่าที่จะเป็นไปได้ หากทุกอย่างยังไม่ชัดเจนก็ไม่สำคัญ: ด้วยการฝึกฝนความเข้าใจจะเกิดขึ้น

เปิดตัว SpringBoot + Flyway

Spring Boot คืออะไร

เรากำลังเปิดตัวอะไร... เพื่อให้เข้าใจว่าเรากำลังทำอะไรและทำไม คุณต้องตัดสินใจว่า SpringBoot คืออะไร ก่อนอื่น มาพูดถึงSpring กันก่อน (ก็เร็วมาก) กัน ก่อน ในขณะนี้ ถือเป็นมาตรฐานอุตสาหกรรมโดยพฤตินัยในการพัฒนาแอปพลิเคชันเซิร์ฟเวอร์ใน Java มาตรฐานของอะไร? ฉันจะอธิบายเรื่องนี้ให้คุณได้อย่างไร? Spring เป็นโครงกระดูกของแอปพลิเคชัน ซึ่งเราจะโยน "เนื้อ" ซึ่งเป็นตรรกะทางธุรกิจของเราลงไป ด้วยความช่วยเหลือของ Spring (ต่อไปนี้ฉันจะใช้กระดาษลอกลายนี้เพื่อไม่ให้เสียเวลาในการเปลี่ยนภาษา :D)) Spring ทำให้เราเริ่มต้นจากการที่เราเริ่มทำทุกอย่าง มีหลายแง่มุมหลายโมดูลาร์:
  1. คุณต้องการทำงานกับฐานข้อมูลหรือไม่? คุณต้องการความสัมพันธ์ไหม? คุณต้องการไม่สัมพันธ์กันหรือไม่? เราอยู่ที่นี่กับ Spring Data
  2. คุณต้องการทำงานกับคำขอ http หรือไม่? เอาล่ะ Spring web (Spring MVC)
  3. คุณต้องการคอนเทนเนอร์สำหรับสิ่งของทั้งหมดของคุณในที่เดียวหรือไม่? นี่คือสปริงคอร์
  4. คุณจำเป็นต้องตั้งค่าความปลอดภัยในโปรเจ็กต์เพื่อให้มีบทบาทและสายการบังคับบัญชาที่แตกต่างกันหรือไม่? ความปลอดภัยของสปริง
  5. เมื่อคุณคิดว่ามันคงจะดีถ้ามีสิ่งนั้น ปรากฎว่า Spring มีสิ่งที่คุณต้องการอยู่แล้ว และบูรณาการได้อย่างรวดเร็วและง่ายดาย
ดังนั้นเราจึงสามารถพูดได้ว่านี่ไม่ใช่แค่กรอบงาน (เช่นห้องสมุดขนาดใหญ่) แต่เป็นระบบนิเวศทั้งหมดที่กำลังพัฒนาอย่างรวดเร็ว เพื่อทำความเข้าใจว่า Spring Core คืออะไร นั่นคือฐานที่โมดูลเชื่อมต่ออยู่ ฉันแนะนำให้คุณชมการสาธิตสดเกี่ยวกับการสร้างเฟรมเวิร์กของคุณเอง ดำเนินรายการโดย Evgeny Borisov ผู้ชายที่เท่มากในสาขา Java และ Spring ทำทุกอย่างที่เขาทำ แล้วงานแห่งฤดูใบไม้ผลิจะชัดเจนยิ่งขึ้นสำหรับคุณ ในทางกลับกัน SpringBoot คือจุดสุดยอดของทุกสิ่งที่พวกเขามี ความมหัศจรรย์ของน้ำบริสุทธิ์ การตั้งค่าขั้นต่ำเพื่อเปิดใช้งานแอปพลิเคชันครั้งแรก แน่นอนว่าสิ่งนี้จะไม่ทำให้คุณเข้าใจว่าจะใช้มันอย่างไรและต้องทำอย่างไร แต่ก่อนที่จะเร่งรีบไปสู่การพัฒนาอย่างลึกซึ้ง คุณต้องมองทุกอย่างจากมุมสูงก่อน

เปิดตัว SpringBoot

เนื่องจากเราเข้าใจแล้วว่า Maven คืออะไร เรามาสร้างโปรเจ็กต์ใหม่ตามความต้องการของเรากันดีกว่า ในการดำเนินการนี้คุณเพียงแค่ต้องไปที่เว็บไซต์ที่สร้างขึ้นเป็นพิเศษสำหรับเรื่องนี้ มันเรียกว่าSpring Initializr "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 2ที่นี่คุณจะต้องกรอกและเลือกสิ่งที่คุณต้องการ:
  1. เครื่องมือสร้างโปรเจ็กต์เป็นแบบ gradle หรือ maven อย่างที่คุณเห็น Ant ไม่ได้ถูกกล่าวถึงอีกต่อไป นี่เป็นคำแนะนำที่ดีว่าเครื่องมือสร้างใดที่คุ้มค่ากับเวลาของคุณ
  2. ภาษาที่คุณเขียนได้คือ java, kotlin, groovy ทุกอย่างเรียบง่ายที่นี่: ทั้งหมดเหมือน JVM และรันโค้ด Java ได้อย่างง่ายดาย อย่างไรก็ตามมันก็คุ้มค่าที่จะดู Kotlin Groovy ไม่น่าสนใจเลย (มีช่วงหนึ่งที่พวกเขาเปลี่ยนมาใช้กรูฟ แต่มันก็ผ่านไปอย่างรวดเร็ว)
  3. เวอร์ชัน Spring... ที่นี่คุณต้องเข้าใจว่าเวอร์ชันของส่วนหลักของ Spring และโมดูลนั้นสอดคล้องกัน
  4. ข้อมูลโครงการ ฉันได้อธิบายสิ่งเหล่านี้แล้ว
  5. เราเลือกว่าจะรวบรวมไฟล์เก็บถาวรใด - Jar หรือ War
  6. เวอร์ชัน Java ที่เราชื่นชอบ และล่าสุดก็มีเวอร์ชั่นเหล่านี้ออกมาเยอะมาก... รอมาหลายปีแล้ว ตอนนี้มีปีละสองปีแล้ว
ในกรณีของเรา เราจะเผยแพร่โปรเจ็กต์นี้ใน องค์กร JavaRush Communityดังนั้นข้อมูลเกี่ยวกับโปรเจ็กต์จึงมีความเหมาะสม:
  1. Maven - ไม่ใช่เพื่ออะไรเลยที่เราคุยกับคุณเกี่ยวกับเรื่องนี้ก่อนหน้านี้
  2. Java คือที่รักของเรา :D
  3. มาใช้เวอร์ชัน 2.2.11 กันเถอะ ทำไมไม่ใหม่ล่าสุดล่ะ? เพราะยิ่งใหม่ก็ยิ่งมีโอกาสที่อาจมีจุดบกพร่องมากขึ้นเท่านั้น สำหรับเรามันไม่สำคัญว่าจะเป็นเวอร์ชั่นไหน แต่รุ่นเก่าจะเชื่อถือได้มากกว่า ดังนั้นเราจึงเลือก 2.2.11
  4. กลุ่ม: com.github.javarushcommunity
  5. สิ่งประดิษฐ์: springboot-flyway-demo
  6. ชื่อ: SpringBoot + Flyway Demo
  7. คำอธิบาย: โครงการสาธิตการบูรณาการระหว่าง SpringBoot และ Flyway (ใช่แล้ว ความสามารถในการเขียนเอกสารเป็นส่วนสำคัญของการพัฒนา :))
  8. ชื่อแพ็คเกจ: com.github.javarushcommunity.springbootflywaydemo ที่นี่พวกเขาจะสร้างแพ็คเกจพื้นฐานให้เราทันทีด้วยคลาสที่จะเปิดตัวแอปพลิเคชันของเรา
  9. บรรจุภัณฑ์: โถ
  10. ชวา: 8. อย่าไปข้างหน้าหัวรถจักรและเอาแปดคนเก่าที่ดีไปดีกว่า ทำไมไม่ 11? เพื่ออะไร? สำหรับตัวอย่างของเรา ฉันไม่เห็นประเด็นนี้
"โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 3ตอนนี้เรามาเพิ่มโมดูลกัน เราจำเป็นต้องค้นหาการบูรณาการกับ Flyway คุณยังสามารถเพิ่มบางอย่างที่เกี่ยวข้องกับ MySQL และ Spring Data ได้ มาเพิ่มอีกลอมบอก (นี่เป็นสิ่งที่จำเป็นมาก ตอนนี้เชื่อฉันเถอะ :D)) โดยคลิกที่ADD DEPENDENCIES ... และเลือกทุกสิ่งที่คุณต้องการ: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 4นี่คือวิธีที่เราเพิ่ม Flyway "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 5ลอมบอก... และอื่นๆ เป็นผลให้เราได้รับ: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 6ฮะ... เรากรอกทุกอย่างแล้ว)) ตอนนี้คลิกสร้าง...เพียงเท่านี้ - ไฟล์เก็บถาวรที่มีโปรเจ็กต์ที่สร้างขึ้นก็พร้อมแล้ว :) ยังมีสิ่งที่ยอดเยี่ยมเช่นSHARE... , ซึ่งให้ลิงค์ไปยังหน้าที่คุณเพิ่งกรอก นั่นคือนี่คือสิ่งที่ฉันสร้างขึ้น และแม้ว่าจะมีข้อผิดพลาดเกิดขึ้น คุณก็สามารถตรวจสอบได้โดยใช้ลิงก์เสมอ ต่อไป เราต้องเชื่อมโยงโปรเจ็กต์ที่สร้างขึ้นกับที่เก็บ Git ดังนั้นเราจึงโคลน โปรเจ็กต์springboot-flyway-demo ที่สร้างขึ้น และดาวน์โหลดผ่าน IDEA ในการดำเนินการ นี้คุณจะต้องเปิดแนวคิดและเลือกFile -> New -> Project from Existing Sources... : "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 7เพิ่ม URL แล้วคลิกClone ขั้นตอนต่อไปคือการถ่ายโอนข้อมูลภายในของโปรเจ็กต์ที่สร้างขึ้นภายในโปรเจ็กต์ที่เราโคลน สับสน? ฉันจะแสดงให้คุณดูตอนนี้ ฉันแตกไฟล์แล้วได้รับไฟล์ชุดต่อไปนี้: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 8จำเป็นต้องโอนไฟล์เหล่านี้ไปยังโปรเจ็กต์ที่โคลน เช่นเดียวกับในบทความที่แล้ว มาเพิ่ม pom.xml เป็นโปรเจ็กต์ maven กัน"โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 9ตอนนี้เราสนใจที่จะดูว่าอะไรถูกสร้างขึ้นสำหรับเรา หากคุณเปิดโฟลเดอร์ทั้งหมดใน src และต่อไป คุณจะเห็นลำดับชั้นตามปกติในโครงการ Maven ซึ่งเราได้กล่าวถึงในบทความก่อนหน้านี้ ส่วนใครที่ยังไม่ได้อ่านก็อ่านได้เลย! "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 10จะเห็นได้ว่าเรามีคลาส Application และแอปพลิเคชัน SpringBoot ของเราก็จะถูกเรียกใช้งานด้วย ต้องขอบคุณปลั๊กอิน Maven สำหรับ SpringBoot ตอนนี้เรามีงานที่เราต้องการสำหรับ Maven ซึ่งก็คือ spring-boot:run เราจะหาข้อมูลนี้ได้ที่ไหน? ทางด้านขวามือเปิดแผ่น Maven และโปรเจ็กต์ของเรา: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 11จะมีข้อผิดพลาดและเราอ่านไม่ออกเราจะเห็นสิ่งนี้: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 12หากต้องการข้อมูลเพิ่มเติม เพื่อความรวดเร็วเราสามารถเรียกใช้เมธอดหลักของ คลาส Application: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 13แล้วเราจะเห็นเหตุผลที่แท้จริง: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 14ที่นี่มีข้อมูลเพิ่มเติมแล้วและคุณสามารถทำอะไรกับมันได้ เกิดอะไรขึ้น? เรามีการขึ้นต่อกันที่เกี่ยวข้องกับฐานข้อมูล ดังนั้นเราจึงจำเป็นต้องจัดเตรียมการตั้งค่าสำหรับการเชื่อมต่อกับฐานข้อมูล ในการดำเนินการนี้ เราค้นหาใน Google และพบว่าเราต้องเพิ่มการกำหนดค่าต่อไปนี้ให้กับ application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/flyway_demo_db
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
เราเรียกใช้เมธอดหลักอีกครั้งและได้รับ: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 15ตอนนี้เราต้องเพิ่มการโยกย้ายอย่างน้อยหนึ่งครั้ง หากต้องการเขียนการโยกย้ายอย่างถูกต้อง คุณจะต้องใช้เทมเพลตต่อไปนี้: V<VERSION>__<NAME>.sql เราจะสร้างไฟล์การโยกย้ายชื่อV00001__Create_country_table.sqlลงในโฟลเดอร์ที่เหมาะสม: /src/main/resources/ db.migration/ . มาสร้างตารางประเทศในนั้นกันเถอะ ลองใช้สคริปต์จากบทความที่สองเกี่ยวกับฐานข้อมูล "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 16ก่อนที่จะเริ่ม เรามาเข้าไปสร้างฐานข้อมูลสำหรับงานกันก่อน: flyway_demo_db มาทำสิ่งนี้ผ่าน MysqlWorkbench กัน: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 17ตอนนี้เราสามารถรันเมธอดหลักได้อีกครั้ง: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 18ทุกอย่างเรียบร้อยดี แต่เนื่องจากเราไม่มีอะไรในโปรเจ็กต์เลย มันจึงทำงานเสร็จแล้ว อย่างไรก็ตาม จากบันทึกเป็นที่ชัดเจนว่า ( อ่านว่าบันทึกคืออะไร) ว่า:
  1. เชื่อมต่อกับฐานข้อมูลสำเร็จ
  2. การย้ายข้อมูลได้รับการตรวจสอบแล้วและทุกอย่างเรียบร้อยดี
  3. Flyway ได้สร้างตารางเพื่อจัดการการโยกย้าย
  4. และสิ่งที่การอพยพ 00001 เริ่มต้นขึ้น - การสร้างประเทศประสบความสำเร็จ
หากต้องการตรวจสอบสิ่งนี้ คุณสามารถไปดูได้ว่ากำลังทำอะไรอยู่ในฐานข้อมูล ไปที่เซิร์ฟเวอร์ MySQL ของเราแล้วดูว่าเกิดอะไรขึ้นกับตารางในฐานข้อมูล flyway_demo_db: $ USE flyway_demo_db; $แสดงตาราง; "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 19ตามที่ฉันคาดไว้ การโยกย้ายเกิดขึ้นในระหว่างที่มีการสร้างตารางประเทศและตาราง flyway_schema_history ปรากฏขึ้น ซึ่งเก็บข้อมูลเกี่ยวกับการโยกย้าย มาดูกันต่อว่ามีบันทึกใดบ้าง (และมีบันทึกทั้งหมดหรือไม่) $SELECT * จาก flyway_schema_history; "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 20นี่คือบันทึกเดียวเท่านั้น มันมีข้อมูลที่น่าสนใจมากมาย เวอร์ชัน, คำอธิบายของการโยกย้าย, ประเภทของ SQL (และอาจเป็น XML), ชื่อของสคริปต์เอง, เช็คซัม ( นี่คือสิ่งที่คล้ายกับแฮชโค้ดซึ่งใช้ในการตรวจสอบว่าการโยกย้ายมีการเปลี่ยนแปลงหรือไม่ เท่านี้ก็เป็นอันเสร็จสิ้น ในกรณีที่เราดำเนินการย้ายข้อมูลในฐานข้อมูลแล้วได้รับการแก้ไข: สิ่งนี้ไม่สามารถทำได้ การเปลี่ยนแปลงทั้งหมดจะทำผ่านการย้ายใหม่เท่านั้น และเพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้น จำนวนเช็คจะตรวจสอบสิ่งนี้ ) ชื่อ sql ของผู้ใช้ การประมวลผลการย้าย วันที่ เวลาดำเนินการ และผลลัพธ์ (สำเร็จหรือไม่สำเร็จ) การโยกย้ายที่เขียนเพียงครั้งเดียวไม่ควรเปลี่ยนแปลงในอนาคต แม้ว่าจะมีข้อบกพร่องอยู่ก็ตาม การเปลี่ยนแปลงทั้งหมดจะเกิดขึ้นผ่านการโยกย้ายใหม่เท่านั้น มันสำคัญมาก. เพื่อแสดงให้เห็นว่าจะเกิดอะไรขึ้น มาเปลี่ยนสคริปต์ของเราเล็กน้อยแล้วลองรันอีกครั้ง มาเพิ่มหนึ่งรายการในตารางประเทศในการโยกย้ายของเรา: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 21และเรียกใช้วิธีการหลักและนี่คือสิ่งที่เราได้รับ: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 22ตามที่ฉันคาดไว้ flyway รับรู้ว่าสคริปต์มีการเปลี่ยนแปลงและไม่ได้ดำเนินการโยกย้าย ในบางกรณี อาจจำเป็นต้องเรียกใช้การย้ายข้อมูลที่อัปเดต และเพื่อให้ flyway ข้ามสิ่งนี้ไปได้ คุณจะต้องลบรายการในตาราง flyway_schema_history แล้วจึงเรียกใช้การย้ายที่อัปเดต นี่ไม่ใช่พฤติกรรมปกติและไม่ควรเป็นเช่นนั้น แต่คุณจำเป็นต้องรู้เกี่ยวกับวิธีการแก้ไขปัญหานี้ด้วย เราจัดการกับการโยกย้ายครั้งแรก ตอนนี้ฉันต้องการเพิ่มการโยกย้ายอีกครั้งพร้อมข้อมูลเกี่ยวกับประเทศเช่นเดียวกับในบทความเกี่ยวกับฐานข้อมูล: ไฟล์V00002__Add_test_data_to_country.sql"โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 23และมาเรียกใช้วิธีการหลักอีกครั้ง: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 24จากบันทึกเป็นที่ชัดเจนว่าก่อนที่การโยกย้ายจะเริ่มต้นฐานข้อมูลนั้นถูก ในเวอร์ชัน 00001 ดังนั้นการย้ายข้อมูลทั้งหมดหลังจากเวอร์ชันนี้ ถัดไป เวอร์ชัน 00002 ได้เปิดตัวและประสบความสำเร็จ มาตรวจสอบกันหรือคุณเชื่อฉันแล้วว่าบันทึกสามรายการในประเทศจะอยู่ในฐานข้อมูลแล้ว?)) ฉันจะตรวจสอบ เพื่อเป็นข้อพิสูจน์: "โครงการ Java จาก A ถึง Z": SpringBoot + Flyway - 25บางอย่างเช่นนี้ หากคุณรันโปรเจ็กต์อีกครั้ง flyway จะข้ามขั้นตอนการย้ายข้อมูลออกไป เนื่องจากฐานข้อมูลสอดคล้องกับเวอร์ชันที่ต้องการโดยสมบูรณ์

บทสรุป

ครั้งนี้เราได้เรียนรู้วิธีทำความเข้าใจและใช้เครื่องมือย้ายฐานข้อมูลร่วมกับ SpringBoot ข้อมูลนี้จำเป็นต่อการทำความเข้าใจว่าเครื่องมือควบคุมเวอร์ชันฐานข้อมูลคืออะไร โดยใช้ Flyway เป็นตัวอย่าง เพื่อน ๆ ซอร์สโค้ดของโครงการที่ฉันแสดงนั้นเผยแพร่ในองค์กรของเราบน Github ถ้าคุณชอบตัวอย่างนี้ให้ดาวเลยแล้วฉันจะเข้าใจว่างานของฉันมีประโยชน์และคุ้มค่าที่จะทำต่อจริงๆ ตามเนื้อผ้า ฉันแนะนำให้สมัครบัญชี Github ของฉัน ฉันดำเนินงานทั้งหมดของฉันเกี่ยวกับโอเพ่นซอร์สและโครงการสาธิตทั้งหมดที่มาพร้อมกับบทความของฉันผ่านทางเขา ขอบคุณทุกคนที่อ่าน ครั้งต่อไปเราจะเขียนใบสมัครของเรา จะมีทฤษฎีที่จำเป็นบางอย่างเกี่ยวกับ Docker ในอนาคต แต่เราจะเจือจางมันลงอย่างมากด้วยการฝึกฝน

ลิงค์ที่เป็นประโยชน์

วันนี้มีลิงค์ที่มีประโยชน์ไม่มาก ดูวิดีโอของ Evgeniy สิ คุ้มจริงๆ!
  1. เว็บไซต์สำหรับสร้างโครงการใน Spring
  2. Evgeniy Borisov - ผู้สร้างสปริง
  3. เอกสารประกอบใน Spring สำหรับ Flyway

รายการเนื้อหาทั้งหมดในซีรีส์นี้อยู่ที่ตอนต้นของบทความนี้

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION