Spring เป็นหนึ่งในเฟรมเวิร์กที่ได้รับความนิยมมากที่สุดสำหรับพัฒนาแอพพลิเคชั่นด้วยภาษาจาวา แรกเริ่มเราใช้ Spring เพื่อพัฒนาเว็บแอปพลิเคชัน แต่เราสามารถนำ Spring มาใช้กับการพัฒนาแอพพลิเคชั่นสำหรับคอมพิวเตอร์ตั้งโต๊ะหรือแม้แต่แอปพลิเคชันที่ทำงานในแบบบรรทัดคำสั่งได้ Spring เป็นเฟรมเวิร์กที่รวบรวมเฟรมเวิร์กหลายๆเฟรมเวิร์กมาทำงานร่วมกันเพื่อสร้างเป็นฟังก์ชันมาตรฐานให้กับแอปพลิเคชัน ในบางครั้งเราจึงเรียก Spring ว่าแพลตฟอร์ม ตัวอย่างของสิ่งที่ Spring สามารถทำได้ เช่น

  • component container รองรับการจัดการวงจรชีวิตของออบเจกต์ภายในแอพพลิเคชั่น
  • data access framework รองรับการทำงานกับฐานข้อมูลได้หลายแบบ
  • web framework มีเฟรมเวิร์กในการพัฒนาเว็บแอพพลิเคชั่น
  • security framework มีเฟรมเวิร์กรองรับเรื่องความปลอดภัย เช่น การรับรองผู้ใช้งาน การควบคุมการใช้งาน
  • testing framework มีเฟรมเวิร์กรองรับการทดสอบแอพพลิเคชั่น

เนื่องจาก Spring มีความสามารถมากมาย ดังนั้นจึงมีความซับซ้อนอย่างมากในการตั้งค่าการใช้งาน ทางผู้พัฒนา Spring จึงพัฒนาเฟรมเวิร์ก Spring Boot ขึ้นมาเพื่อแก้ปัญหาเรื่องความซับซ้อนในการตั้งค่าการใช้งานของ Spring ให้เป็นอัตโนมัติมากขึ้น ทำให้นักพัฒนาไม่ต้องตั้งค่าทุกอย่างด้วยตัวเองโดย Spring Boot เฟรมเวิร์กจะใช้ค่าตั้งต้นที่กำหนดแล้วในการกำหนดค่าต่างๆให้แทน นอกจากนี้ Spring Boot ยังรองรับการใช้งานในแบบบรรทัดคำสั่ง การติดตามสถานะการทำงานของแอพพลิเคชั่น มี application server ในตัวเพื่อให้เราเรียกใช้แอพพลิเคชั่นที่สร้างขึ้นมาได้เลย

เราสามารถทดลองสร้างโครงการด้วย Spring Boot โดยไปที่เว็บ https://start.spring.io/ เพื่อสร้างโครงการ Spring Boot แบบพื้นฐานซึ่งก็คือการกำหนดโครงสร้างของโครงการนั่นเอง โดยค่าสำคัญๆที่เราต้องกำหนดคือ เครื่องมือที่ใช้สร้าง (build) ว่าจะใช้ maven หรือ gradle เลือกภาษาที่ใช้ในการพัฒนาแอพพลิเคชั่นว่าจะใช้ ภาษาจาวา หรือ kotlin หรือ groovy เลือกเวอร์ชั่นของ Spring Boot ที่ต้องการ กำหนดชื่อให้กับ group artifact แพคเกจ ระบุคำอธิบาย ระบุไลบรารี่ (dependency) ที่ต้องการใช้งาน สำหรับวิธีการตั้งชื่อที่ดีสามารถดูได้จาก https://www.baeldung.com/spring-projects-version-naming

เมื่อกำหนดค่าต่างๆเรียบร้อยแล้ว กดปุ่ม GENERATE เว็บจะสร้างไฟล์ที่เป็นโครงสร้างพื้นฐานของโครงการให้เราบันทึกมาใช้งาน ซึ่งเมื่อเราขยายไฟล์ออกมาจะเห็นโครงสร้างของไดเร็คทอรี่ตามวิธีการสร้าง (build) ที่เราเลือก เช่น ในกรณีที่เลือก gradle จะได้โครงสร้างของไดเร็คทอรี่ตามตัวอย่างด้านล่าง

เราสามารถสั่งสร้างโครงการได้ด้วยคำสั่ง ./gradlew build ซึ่งจะได้ผลลัพธ์เป็น .jar ไฟล์ที่ /build/libs

เราสามารถเรียกใช้งานแอพพลิเคชั่นได้โดยการเรียกใช้งาน .jar ไฟล์ด้วยคำสั่ง java -jar build/libs/*.jar ซึ่งจะได้ผลลัพธ์ตามตัวอย่างด้านล่าง เราสามารถรวมคำสั่งสร้างและเรียก .jar ไฟล์ได้เป็น ./gradlew build && java -jar build/libs/*.jar

     แอพพลิเคชั่น Spring Boot ถูกออกแบบมาให้มี servlet คอนเทนเนอร์ ซึ่งเป็นแอพพลิเคชั่นเซิร์ฟเวอร์ในตัวเอง ดังนั้นเราจึงสามารถเรียกใช้งานแอพพลิเคชั่นได้โดยไม่ต้องอาศัยแอพพลิเคชั่นเซิร์ฟเวอร์อื่น โดยค่าตั้งต้น Spring Boot จะใช้ Tomcat เป็น servlet คอนเทนเนอร์ในตัวเอง แต่เราก็สามารถเลือกใช้คอนเทนเนอร์อื่น เช่น Jetty หรือ Undertow ได้  คอนเทนเนอร์แบบฝังตัวเหล่านี้มีน้ำหนักเบาและมีฟังก์ชันที่จำเป็นในการให้บริการคำขอ HTTP และเรียกใช้แอปพลิเคชัน Spring Boot 

     เมื่อสร้างแอปพลิเคชัน Spring Boot ระบบจะสร้างไฟล์ JAR แบบสแตนด์อโลนหรือไฟล์ WAR (หากต้องการติดตั้งใช้งานบนแอพพลิเคชั่นเซิร์ฟเวอร์แยกต่างหาก) ไฟล์ JAR หรือ WAR นี้มีโค้ดของแอพพลิเคชันพร้อมด้วย servlet คอนเทนเนอร์ แบบฝังตัว

     เราสามารถสร้างแอพพลิเคชั่น Spring Boot ได้ด้วยโปรแกรม IDE ที่รองรับการสร้างแอพพลิเคชั่น Spring Boot เช่น IntelliJ IDEA, Eclipse, Visual Studio Code, NetBeans, Spring Tools 4 for Eclipse ตัวอย่างเช่น เมื่อเราพัฒนาแอปพลิเคชัน Spring Boot โดยใช้ Eclipse เมื่อเราคอมไพล์จะได้ผลลัพธ์จะเป็นไฟล์ JAR (Java Archive) แบบสแตนด์อโลนที่สามารถเรียกใช้งานได้ (executable file )โดยใช้ Java Runtime Environment (JRE) โดยมีกระบวนการคร่าวๆดังนี้

1. พัฒนาแอปพลิเคชัน Spring Boot ใน Eclipse โดยเขียนคลาส Java กำหนดค่าแอปพลิเคชั่น และรวมไลบรารี่ที่จำเป็นโดยใช้เครื่องมือในการจัดการโครงการ เช่น Maven หรือ Gradle

2. เมื่อเราพร้อมที่จะสร้างแอปพลิเคชันแล้ว เราสามารถใช้ Maven หรือ Gradle เพื่อสร้างไฟล์ Jar ซึ่งเป็นแพคเกจที่สามารถเรียกใช้งานได้ ซึ่งแพคเกจจะรวมไลบรารี่การอ้างอิงและโค๊ดทั้งหมดไว้ในไฟล์ JAR

3. เราเรียกใช้แอปพลิเคชัน Spring Boot โดยใช้คำสั่ง java ของ JRE ซึ่งจะไปเรียก servlet คอนเทนเนอร์มาทำงานและรันแอพพลิเคชั่นขึ้นมา

     การบรรจุแอพพลิเคชัน Spring Boot เป็นไฟล์ JAR เราไม่จำเป็นต้องติดตั้งหรือกำหนดค่าแอปพลิเคชั่นเซิร์ฟเวอร์แยกต่างหาก ไฟล์ JAR มี servlet คอนเทนเนอร์ แบบฝังตัว พร้อมด้วยโค้ดของแอปพลิเคชันและไลบรารี่ต่างๆ ทำให้การแจกจ่ายและเรียกใช้แอปพลิเคชันบนระบบใดๆที่ติดตั้ง JRE ทำได้ง่าย