Spring Boot คือ ตอนที่ 4 : การกำหนดค่าอัตโนมัติ (Auto-Configuration)

  1. ทำความเข้าใจเกี่ยวกับการกำหนดค่าอัตโนมัติของ Spring Boot
  2. การกำหนดค่าอัตโนมัติ (Auto-Configuration) ทำงานอย่างไร
  3. การทำแอพโดยใช้การกำหนดค่าอัตโนมัติ
  4. ปรับแต่งการกำหนดค่าอัตโนมัติ

เหตุผลสำคัญประการหนึ่งที่ Spring Boot ประสบความสำเร็จอย่างโดดเด่นภายในชุมชนนักพัฒนาซอฟต์แวร์คือเนื่องจากใช้แนวทางที่มีความเห็นเป็นเอกฉันท์ในการตั้งค่าแอปพลิเคชัน Spring หนึ่งในความคิดเห็นเหล่านี้เกี่ยวกับแนวคิดของ “auto-configuration” ซึ่งช่วยลดการกำหนดค่าสำเร็จรูปได้อย่างมีประสิทธิภาพ ช่วยประหยัดเวลาอันมีค่าของนักพัฒนา ในบทความนี้ เราจะสำรวจคุณลักษณะการกำหนดค่าอัตโนมัติของ Spring Boot และเราจะใช้คุณลักษณะนี้เพื่อทำแอพ

1. ทำความเข้าใจเกี่ยวกับการกำหนดค่าอัตโนมัติของ Spring Boot

การกำหนดค่าอัตโนมัติของ Spring Boot เป็นคุณลักษณะใหม่ที่กำหนดค่าแอปพลิเคชัน Spring ของคุณโดยอัตโนมัติตามการพึ่งพาที่คุณเพิ่มในโครงการ ตัวอย่างเช่น หากตัวเชื่อมต่อ MySQL อยู่ในพาธคลาสของคุณ และคุณไม่ได้กำหนดค่าการเชื่อมต่อฐานข้อมูลด้วยตนเอง Spring Boot จะกำหนดค่าฐานข้อมูลในหน่วยความจำโดยอัตโนมัติ

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

2. การกำหนดค่าอัตโนมัติ (Auto-Configuration) ทำงานอย่างไร

การกำหนดค่าอัตโนมัติของ Spring Boot ทำงานโดยการตรวจสอบ classpath สำหรับคลาสและไลบรารีเฉพาะ เมื่อพบคลาสเหล่านี้แล้ว ระบบจะตั้งค่าลักษณะการทำงานและการกำหนดค่าเริ่มต้นโดยอัตโนมัติ กระบวนการนี้ส่วนใหญ่เกิดขึ้นผ่านคำอธิบายประกอบ (annotation) @EnableAutoConfiguration ซึ่งเป็นส่วนหนึ่งของคำอธิบายประกอบ (annotation) @SpringBootApplication

คำอธิบายประกอบ @EnableAutoConfiguration จะบอกให้ Spring Boot เริ่มเพิ่ม bean ตามการตั้งค่า classpath, bean อื่นๆ และการตั้งค่าคุณสมบัติต่างๆ ตัวอย่างเช่น หากคุณมี spring-webmvcclasspath และไม่มีการกำหนดค่าอื่น Spring Boot จะตั้งค่าแอปพลิเคชัน Spring MVC โดยอัตโนมัติด้วยคุณสมบัติเริ่มต้น

3. การทำแอพโดยใช้การกำหนดค่าอัตโนมัติ

เรามาอธิบายความมหัศจรรย์ของการกำหนดค่าอัตโนมัติด้วยตัวอย่างที่ใช้งานได้จริง เราจะทำเว็บแอปพลิเคชัน Spring Boot อย่างง่ายที่ใช้ Thymeleaf เป็นเครื่องมือเทมเพลต

การตั้งค่าโครงการ

เราเริ่มต้นด้วยการตั้งค่าโครงการใหม่โดยใช้เครื่องมือ Spring Initializr เราจะต้องเพิ่ม Web และ Thymeleaf เป็นการอ้างอิง Spring Initializr จะสร้างโครงสร้างพื้นฐานของโปรเจ็กต์ด้วยไฟล์บิลด์ที่จำเป็น ( pom.xmlหรือbuild.gradle) ซึ่งมีการอ้างอิงที่ระบุอยู่แล้ว

การสำรวจการกำหนดค่าอัตโนมัติ

เมื่อคุณเปิดคลาสแอปพลิเคชันหลัก คุณจะพบคำอธิบายประกอบ @SpringBootApplication คำอธิบายประกอบนี้เป็นการรวมกันของสามคำอธิบายประกอบ: @SpringBootConfiguration, @EnableAutoConfiguration, และ @ComponentScan

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

คำอธิบายประกอบ@EnableAutoConfiguration จะบอกให้ Spring Boot กำหนดค่าแอปพลิเคชันของคุณโดยอัตโนมัติตามการอ้างอิงที่คุณได้เพิ่มไปยัง classpath

ตอนนี้มาสร้างคลาส Controller ง่ายๆ กัน:

@Controller
public class HomeController {
    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("message", "Hello, Spring Boot Auto-Configuration!");
        return "home";
    }
}

เราเพียงแค่ต้องกำหนดวิธีการจัดการและส่งกลับชื่อมุมมอง เราไม่จำเป็นต้องกำหนดค่า ViewResolver หรือ DispatcherServlet; การกำหนดค่าอัตโนมัติของ Spring Boot จะดูแลสิ่งนั้น

ต่อไป เราสร้างมุมมอง Thymeleaf สร้างไฟล์ home.html ใน src/main/resources/templates:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Home</title>
</head>
<body>
<h2 th:text="${message}"></h2>
</body>
</html>

คือ ${message} แอตทริบิวต์ที่เราเพิ่มในวิธีการควบคุมของเรา Thymeleaf ฉลาดพอที่จะหยิบมันขึ้นมาและแทนที่ด้วยมูลค่าของมัน อีกครั้ง เราไม่จำเป็นต้องตั้งค่า Thymeleaf หรือตัวแก้ไขใดๆ การกำหนดค่าอัตโนมัติของ Spring Boot ทำเพื่อเรา

4. ปรับแต่งการกำหนดค่าอัตโนมัติ

แม้ว่าการกำหนดค่าอัตโนมัติจะสะดวกอย่างเหลือเชื่อ แต่ก็มีบางครั้งที่เราจำเป็นต้องเปลี่ยนการกำหนดค่าเริ่มต้น Spring Boot มีคุณสมบัติมากมายที่เราสามารถระบุใน ไฟล์ application.properties หรือ application.yml เพื่อแทนที่ค่าเริ่มต้น

ตัวอย่างเช่น สมมติว่าเราต้องการเปลี่ยนพอร์ตเริ่มต้นจาก 8080 เป็น 9090 เราสามารถทำได้โดยเพิ่มบรรทัดต่อไปนี้ใน application.properties:

server.port=9090

เมื่อเรารีสตาร์ทแอปพลิเคชันของเรา ตอนนี้แอปพลิเคชันจะเริ่มที่พอร์ต 9090 แทนที่จะเป็นค่าเริ่มต้น 8080 การเปลี่ยนแปลงนี้เกิดจากคุณสมบัติที่เรากำหนดเองมีผลเหนือการกำหนดค่าอัตโนมัติ


การกำหนดค่าอัตโนมัติของ Spring Boot เป็นคุณสมบัติอันทรงพลังที่ช่วยเร่งการทำแอพอย่างมากโดยไม่จำเป็นต้องกำหนดค่าด้วยตนเอง มันสร้างสมมติฐานที่ชาญฉลาดตามการตั้งค่า classpath ที่มีอยู่และย้อนกลับไปเมื่อมีการกำหนดค่าแบบกำหนดเอง จากการทำแอพที่ใช้งานได้จริง เราเห็นว่าการตั้งค่าแอปพลิเคชัน Spring Boot โดยใช้ Thymeleaf นั้นง่ายเพียงใดโดยไม่ต้องกำหนดค่าด้วยตนเอง


Spring Boot คืออะไร

Spring Boot คือ ตอนที่ 3 : ลองทำแอพ Spring Boot แรก
Spring Boot คือ ตอนที่ 5 : คำอธิบายประกอบ (Annotations)