บทความจากซีรีส์เกี่ยวกับการสร้างโปรเจ็กต์ Java (ลิงก์ไปยังเนื้อหาอื่นอยู่ท้ายสุด) เป้าหมายคือการวิเคราะห์เทคโนโลยีที่สำคัญ ผลลัพธ์คือการเขียนบอทโทรเลข ในส่วนนี้เราจะลองเปิดตัว SpringBoot และ Flyway จำนวนทฤษฎีขั้นต่ำตามที่คุณต้องการ))) เราละเว้นการเปรียบเทียบขั้นสุดท้ายของ Flyway/Liquibase เป็นระยะเวลาไม่มีกำหนดและไปยังจุดนั้น และถึงอย่างนั้นมันก็ลากต่อไปแล้ว เพื่อไม่ให้อธิบาย Flyway ซ้ำสองครั้ง ฉันจึงตัดสินใจเพิ่มสิ่งนี้ลงในโครงการ JRTB ในอนาคตของเราทันที
หลายแง่มุมหลายโมดูลาร์:
เราต้องทำอะไรเพื่อเป็นส่วนหนึ่งของสิ่งนี้?
- เปิดแอปพลิเคชัน SpringBoot โดยใช้ Maven
- เพิ่ม Flyway เข้าไปที่นั่น: โชคดีที่สามารถรวมเข้าด้วยกันได้อย่างง่ายดาย
- เพิ่มสคีมาสำหรับตารางที่เรามีในฐานข้อมูลตัวอย่าง
ฟลายเวย์คืออะไร
หากต้องการใช้สิ่งใดสิ่งหนึ่ง คุณต้องเข้าใจก่อนว่ามันคืออะไรและเพราะเหตุใด Flywayเป็นเครื่องมือควบคุมเวอร์ชันฐานข้อมูล คำศัพท์ก็รู้ดีแต่ยังไม่เสริมความเข้าใจใช่ไหม? เรามาลองอธิบายปัญหาที่ทางบินแก้ไขกันดีกว่า สมมุติว่าเรามีโครงการ เช่นเดียวกับทุกสิ่งในโลกของเรา มันไม่สมบูรณ์แบบ ดังนั้นจึงไม่สามารถวางแผนและร่างเวอร์ชันสุดท้ายของโครงการได้ ทุกครั้งที่มีความแตกต่างบางอย่างที่ไม่ทราบสาเหตุปรากฏขึ้น โครงการใช้ฐานข้อมูลในการทำงาน แน่นอนว่าหากโครงการเปลี่ยนแปลง โครงสร้างฐานข้อมูลก็อาจเปลี่ยนแปลงไปด้วย สมมติว่าเราเพิ่มฟิลด์ใหม่สำหรับหนึ่งในเอนทิตีในโครงการของเรา ทำอย่างไร?- เพิ่มฟิลด์นี้ให้กับเอนทิตีของเรา อัปเดตทุกอย่างเพื่อให้ตรรกะทางธุรกิจทำงานได้
- อัพเดตฐานข้อมูล วิธีเดียวที่เป็นไปได้คือทำด้วยตนเอง ในการดำเนินการนี้ คุณจะต้องเข้าไปลงทะเบียนสคริปต์ sql ที่จำเป็น
- แต่หากเรามีสถานที่มากกว่าหนึ่งแห่งที่เราปรับใช้โปรเจ็กต์ของเรา จำเป็นต้องดำเนินการนี้ในแต่ละแห่งหรือไม่?
- และหากเราอยากย้อนกลับไป เราจะรู้ได้อย่างไรว่าตอนนี้โครงสร้างฐานข้อมูลอยู่ในสถานะไหน?
- เราจะแน่ใจได้อย่างไรว่าการเปลี่ยนแปลงฐานข้อมูลสำเร็จ?
- ฉันจะได้รับโอกาสในการติดตามการเปลี่ยนแปลงฐานข้อมูลทั้งหมดที่เกิดขึ้นในโครงการได้อย่างไร
เปิดตัว SpringBoot + Flyway
Spring Boot คืออะไร
เรากำลังเปิดตัวอะไร... เพื่อให้เข้าใจว่าเรากำลังทำอะไรและทำไม คุณต้องตัดสินใจว่า SpringBoot คืออะไร ก่อนอื่น มาพูดถึงSpring กันก่อน (ก็เร็วมาก) กัน ก่อน ในขณะนี้ ถือเป็นมาตรฐานอุตสาหกรรมโดยพฤตินัยในการพัฒนาแอปพลิเคชันเซิร์ฟเวอร์ใน Java มาตรฐานของอะไร? ฉันจะอธิบายเรื่องนี้ให้คุณได้อย่างไร? Spring เป็นโครงกระดูกของแอปพลิเคชัน ซึ่งเราจะโยน "เนื้อ" ซึ่งเป็นตรรกะทางธุรกิจของเราลงไป ด้วยความช่วยเหลือของ Spring (ต่อไปนี้ฉันจะใช้กระดาษลอกลายนี้เพื่อไม่ให้เสียเวลาในการเปลี่ยนภาษา :D)) Spring ทำให้เราเริ่มต้นจากการที่เราเริ่มทำทุกอย่าง มี- คุณต้องการทำงานกับฐานข้อมูลหรือไม่? คุณต้องการความสัมพันธ์ไหม? คุณต้องการไม่สัมพันธ์กันหรือไม่? เราอยู่ที่นี่กับ Spring Data
- คุณต้องการทำงานกับคำขอ http หรือไม่? เอาล่ะ Spring web (Spring MVC)
- คุณต้องการคอนเทนเนอร์สำหรับสิ่งของทั้งหมดของคุณในที่เดียวหรือไม่? นี่คือสปริงคอร์
- คุณจำเป็นต้องตั้งค่าความปลอดภัยในโปรเจ็กต์เพื่อให้มีบทบาทและสายการบังคับบัญชาที่แตกต่างกันหรือไม่? ความปลอดภัยของสปริง
- เมื่อคุณคิดว่ามันคงจะดีถ้ามีสิ่งนั้น ปรากฎว่า Spring มีสิ่งที่คุณต้องการอยู่แล้ว และบูรณาการได้อย่างรวดเร็วและง่ายดาย
เปิดตัว SpringBoot
เนื่องจากเราเข้าใจแล้วว่า Maven คืออะไร เรามาสร้างโปรเจ็กต์ใหม่ตามความต้องการของเรากันดีกว่า ในการดำเนินการนี้คุณเพียงแค่ต้องไปที่เว็บไซต์ที่สร้างขึ้นเป็นพิเศษสำหรับเรื่องนี้ มันเรียกว่าSpring Initializr ที่นี่คุณจะต้องกรอกและเลือกสิ่งที่คุณต้องการ:- เครื่องมือสร้างโปรเจ็กต์เป็นแบบ gradle หรือ maven อย่างที่คุณเห็น Ant ไม่ได้ถูกกล่าวถึงอีกต่อไป นี่เป็นคำแนะนำที่ดีว่าเครื่องมือสร้างใดที่คุ้มค่ากับเวลาของคุณ
- ภาษาที่คุณเขียนได้คือ java, kotlin, groovy ทุกอย่างเรียบง่ายที่นี่: ทั้งหมดเหมือน JVM และรันโค้ด Java ได้อย่างง่ายดาย อย่างไรก็ตามมันก็คุ้มค่าที่จะดู Kotlin Groovy ไม่น่าสนใจเลย (มีช่วงหนึ่งที่พวกเขาเปลี่ยนมาใช้กรูฟ แต่มันก็ผ่านไปอย่างรวดเร็ว)
- เวอร์ชัน Spring... ที่นี่คุณต้องเข้าใจว่าเวอร์ชันของส่วนหลักของ Spring และโมดูลนั้นสอดคล้องกัน
- ข้อมูลโครงการ ฉันได้อธิบายสิ่งเหล่านี้แล้ว
- เราเลือกว่าจะรวบรวมไฟล์เก็บถาวรใด - Jar หรือ War
- เวอร์ชัน Java ที่เราชื่นชอบ และล่าสุดก็มีเวอร์ชั่นเหล่านี้ออกมาเยอะมาก... รอมาหลายปีแล้ว ตอนนี้มีปีละสองปีแล้ว
- Maven - ไม่ใช่เพื่ออะไรเลยที่เราคุยกับคุณเกี่ยวกับเรื่องนี้ก่อนหน้านี้
- Java คือที่รักของเรา :D
- มาใช้เวอร์ชัน 2.2.11 กันเถอะ ทำไมไม่ใหม่ล่าสุดล่ะ? เพราะยิ่งใหม่ก็ยิ่งมีโอกาสที่อาจมีจุดบกพร่องมากขึ้นเท่านั้น สำหรับเรามันไม่สำคัญว่าจะเป็นเวอร์ชั่นไหน แต่รุ่นเก่าจะเชื่อถือได้มากกว่า ดังนั้นเราจึงเลือก 2.2.11
- กลุ่ม: com.github.javarushcommunity
- สิ่งประดิษฐ์: springboot-flyway-demo
- ชื่อ: SpringBoot + Flyway Demo
- คำอธิบาย: โครงการสาธิตการบูรณาการระหว่าง SpringBoot และ Flyway (ใช่แล้ว ความสามารถในการเขียนเอกสารเป็นส่วนสำคัญของการพัฒนา :))
- ชื่อแพ็คเกจ: com.github.javarushcommunity.springbootflywaydemo ที่นี่พวกเขาจะสร้างแพ็คเกจพื้นฐานให้เราทันทีด้วยคลาสที่จะเปิดตัวแอปพลิเคชันของเรา
- บรรจุภัณฑ์: โถ
- ชวา: 8. อย่าไปข้างหน้าหัวรถจักรและเอาแปดคนเก่าที่ดีไปดีกว่า ทำไมไม่ 11? เพื่ออะไร? สำหรับตัวอย่างของเรา ฉันไม่เห็นประเด็นนี้
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
เราเรียกใช้เมธอดหลักอีกครั้งและได้รับ: ตอนนี้เราต้องเพิ่มการโยกย้ายอย่างน้อยหนึ่งครั้ง หากต้องการเขียนการโยกย้ายอย่างถูกต้อง คุณจะต้องใช้เทมเพลตต่อไปนี้: V<VERSION>__<NAME>.sql เราจะสร้างไฟล์การโยกย้ายชื่อV00001__Create_country_table.sqlลงในโฟลเดอร์ที่เหมาะสม: /src/main/resources/ db.migration/ . มาสร้างตารางประเทศในนั้นกันเถอะ ลองใช้สคริปต์จากบทความที่สองเกี่ยวกับฐานข้อมูล ก่อนที่จะเริ่ม เรามาเข้าไปสร้างฐานข้อมูลสำหรับงานกันก่อน: flyway_demo_db มาทำสิ่งนี้ผ่าน MysqlWorkbench กัน: ตอนนี้เราสามารถรันเมธอดหลักได้อีกครั้ง: ทุกอย่างเรียบร้อยดี แต่เนื่องจากเราไม่มีอะไรในโปรเจ็กต์เลย มันจึงทำงานเสร็จแล้ว อย่างไรก็ตาม จากบันทึกเป็นที่ชัดเจนว่า ( อ่านว่าบันทึกคืออะไร) ว่า:
- เชื่อมต่อกับฐานข้อมูลสำเร็จ
- การย้ายข้อมูลได้รับการตรวจสอบแล้วและทุกอย่างเรียบร้อยดี
- Flyway ได้สร้างตารางเพื่อจัดการการโยกย้าย
- และสิ่งที่การอพยพ 00001 เริ่มต้นขึ้น - การสร้างประเทศประสบความสำเร็จ
บทสรุป
ครั้งนี้เราได้เรียนรู้วิธีทำความเข้าใจและใช้เครื่องมือย้ายฐานข้อมูลร่วมกับ SpringBoot ข้อมูลนี้จำเป็นต่อการทำความเข้าใจว่าเครื่องมือควบคุมเวอร์ชันฐานข้อมูลคืออะไร โดยใช้ Flyway เป็นตัวอย่าง เพื่อน ๆ ซอร์สโค้ดของโครงการที่ฉันแสดงนั้นเผยแพร่ในองค์กรของเราบน Github ถ้าคุณชอบตัวอย่างนี้ให้ดาวเลยแล้วฉันจะเข้าใจว่างานของฉันมีประโยชน์และคุ้มค่าที่จะทำต่อจริงๆ ตามเนื้อผ้า ฉันแนะนำให้สมัครบัญชี Github ของฉัน ฉันดำเนินงานทั้งหมดของฉันเกี่ยวกับโอเพ่นซอร์สและโครงการสาธิตทั้งหมดที่มาพร้อมกับบทความของฉันผ่านทางเขา ขอบคุณทุกคนที่อ่าน ครั้งต่อไปเราจะเขียนใบสมัครของเรา จะมีทฤษฎีที่จำเป็นบางอย่างเกี่ยวกับ Docker ในอนาคต แต่เราจะเจือจางมันลงอย่างมากด้วยการฝึกฝนลิงค์ที่เป็นประโยชน์
วันนี้มีลิงค์ที่มีประโยชน์ไม่มาก ดูวิดีโอของ Evgeniy สิ คุ้มจริงๆ!- เว็บไซต์สำหรับสร้างโครงการใน Spring
- Evgeniy Borisov - ผู้สร้างสปริง
- เอกสารประกอบใน Spring สำหรับ Flyway
GO TO FULL VERSION